vs 创建win32 dll(带有DllMain函数)项目时遇到的一系列问题

好久没有写win32 的dll 了,之前一直用带窗体的mfc dll(方面测试嘛…毕竟),搞得现在忘了正经的dll怎么写了,没办法,在这里总结下,防止以后再忘。(以后肯定忘,可能我明天就忘了 哈哈哈)。!!!∑(゚Д゚ノ)ノ

项目创建完成后,会打开起始页面******.cpp (具体这是个什么东西没干什么用的我也不知道,反正我没用这家伙,pass掉,直接打开dllMain.cpp)
在这里插入图片描述
然后看dllmain.cpp 的DllMain函数:(如果是测试的话,只看cass DLL_PROCESS_ATTACH 就行了,另外就是win32 dll 里的 messagebox 参数和mfc的不太一样,具体的看图吧)
在这里插入图片描述因为我自己写的函数里用到了CWnd、CRuntimeClass等类,所以需要引入 <afxwin.h>这个头文件(在MFC里是不需要的,烦)。你以为这样就结束了?不可能,它提示你windows.h重复定义,你需要到stdafx.h里删除 #include<windows.h>,另外一回还有一个错误,这里一并说了,就是在#pragma once 下加上一段代码:
在这里插入图片描述stdafx.h的代码呈上:

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once
#pragma region 必须加
#define NO_WARN_MBCS_MFC_DEPRECATION
#pragma endregion


#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // 从 Windows 头中排除极少使用的资料
// Windows 头文件:
#pragma region 必须去掉
//#include <windows.h>
#pragma endregion





// TODO:  在此处引用程序需要的其他头文件

那…现在结束了吗? 没-有- too young too simple ᕙ༼ ͝°益° ༽ᕗ。在DllMain函数的上方还需要加上这一段代码:

#pragma region 必须加
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif
#pragma endregion

具体是为什么要这么写…嗯…我也不知道 呜哈哈哈哈哈!!!,反正能跑就行了。至此基本上所有的问题都解决了(应该是都混过去了),至于原理,有时间再说吧,当一天和尚敲一天中,今天水下博客很开心,做个祸害社会的搅屎棍。啊,睡觉了~ (‘-ωก̀ )好困。

猜你喜欢

转载自blog.csdn.net/Simon798/article/details/88921636
今日推荐