积极答复者
BOOL WINAPI DLLMain如何设置

问题
-
BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);
{
HANDLE g_hModule;
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
cout<<"Dll is attached!"<<endl;
g_hModule = (HINSTANCE)hModule;
break;
case DLL_PROCESS_DETACH:
cout<<"Dll is detached!"<<endl;
g_hModule=NULL;
break;
}
return true;
}
请问这段代码 里面的 switch case的那些语句是必须的吗?我不太清楚 BOOL WINAPI DLLMain这个函数的如何具体设置,比如就
BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);
{
}
这样可以吗?
另外我想给第一个实例句柄参数设置 怎么写?
是这样BOOL WINAPI DLLMain(xxx=hinstance,DWORD fdwReason, LPVOID lpvReserved);
还是
BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);
{
xxx=hinstance
}这样? XXX是可以自己取得变量名字吗?
答案
-
你好,
欢迎来到这里。
如果您的dll需要DllMain入口函数,那这段代码中的switch case 是必须的。不需要的话,整个BOOL WINAPI DLLMain函数都是不需要的。
另外建议您不要省略另外两个线程选项:DLL_THREAD_ATTACH、DLL_THREAD_DETACH。具体参见这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx
没太明白您的第二个需求的意思,这里您第一种写法是语法错误的。第二种,没明白您的意思。如果您想实现方法的话可以另外新建一个cpp文件去在其中写入您的处理过程。
此致
Elegentin Xie
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37
-
你好,
欢迎回来。
MFC DLL的入口函数已经封装好,不用自己再写。上面你给出的Win32 Dll下的入口函数定义方式。这个switch语句是整个用于判断dll载入与释放的。
Glinstance、hinstance是自定义的变量。
此致
Elegentin Xie
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- 已标记为答案 wjsta 2013年3月20日 12:39
- 取消答案标记 wjsta 2013年3月20日 12:39
- 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37
全部回复
-
你好,
欢迎来到这里。
如果您的dll需要DllMain入口函数,那这段代码中的switch case 是必须的。不需要的话,整个BOOL WINAPI DLLMain函数都是不需要的。
另外建议您不要省略另外两个线程选项:DLL_THREAD_ATTACH、DLL_THREAD_DETACH。具体参见这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx
没太明白您的第二个需求的意思,这里您第一种写法是语法错误的。第二种,没明白您的意思。如果您想实现方法的话可以另外新建一个cpp文件去在其中写入您的处理过程。
此致
Elegentin Xie
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37
-
多谢 第一个问题我已经从您这里等到了答案。请问switch case这个要写些什么呢?是这样的我在网络看到一个教程一个全局钩子的。教程里关于设置DllMain函数这里只交代一句”在主文件KSHook.cpp的DLLMain函数中加入保存DLL实例句柄的语句:glhinstance=hinstance;“ 所以我并不知道switch case 是具体怎样设置 您能帮我解答一下吗。另外glhinstance这个是程序员自己取得变量名称是吗?
这个网址是教程的地址百度文库的
http://wenku.baidu.com/view/af044fa5284ac850ad0242c2.html
我第二个需求的意思就是 HINSTANCE hinstdll 这个参数是 句柄参数吧, 我想给他赋值或是定义, 就是这个参数赋值一个变量名,XXX的意思就是我想取得变量名 ,我不知道具体的格式。
例如:这种“BOOL WINAPI DllMain(HINSTANCE myh, DWORD, LPVOID)”格式是正确的吗? 其中 myh是我想取的名字
还是要把 “HINSTANCE myh” 参数写成“HINSTANCE=myh”或“myh=HINSTANCE”,并放在{ }这个过程代码里面?
另外在VC2012 C++里面建立MFC dll 项目 如果不选空项目的话是不是IDE会自动设置这个DLL的DllMain函数?因为我自己写了一下DllMain函数后,调试 系统提示错误如下:
错误 1 error LNK2005: _DllMain@12 已经在 KSHook00.obj 中定义 d:\documents\visual studio 2012\Projects\KSHook001\KSHook001\mfcs110ud.lib(dllmodul.obj)
错误 2 error LNK1169: 找到一个或多个多重定义的符号 D:\Documents\Visual Studio 2012\Projects\KSHook001\Debug\KSHook001.dll 1
“KSHook001.dll“是我给的项目名称
-
你好,
欢迎回来。
MFC DLL的入口函数已经封装好,不用自己再写。上面你给出的Win32 Dll下的入口函数定义方式。这个switch语句是整个用于判断dll载入与释放的。
Glinstance、hinstance是自定义的变量。
此致
Elegentin Xie
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- 已标记为答案 wjsta 2013年3月20日 12:39
- 取消答案标记 wjsta 2013年3月20日 12:39
- 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37