急....DllMain问题

allen_zhaozhencn 2004-07-14 11:33:06
我做了一个win32的DLL,在DLL中定义了一个全局变量g_hInst=NULL,在DllMain内将DLL的实例hInstance保存到全局变量中g_hInst, 在客户端::LoadLibrary后,发现该g_hInst的值仍为NULL, 何解?
...全文
147 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liotion 2004-07-15
  • 打赏
  • 举报
回复
把这种要与外界通信的变量写道共享数据段就可以了。
#pragma data_seg("Shared")

HINSTANCE g_hIns = NULL;

#pragma data_seg()

#pragma comment(linker,"/Section:Shared,rws") //设置全局共享数据段的属性
allen_zhaozhencn 2004-07-14
  • 打赏
  • 举报
回复
extern "C"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hInstance = (HINSTANCE)hModule;


switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}


return TRUE;
}


在程序结束时,才FreeLibrary的.
kvls 2004-07-14
  • 打赏
  • 举报
回复
怎么会?看看是不是你什么地方写错了?
检查一下你在DllMain的什么地方赋值的,会不会有问题,其他地方还有没有赋值,装载是否成功等等。
vcforever 2004-07-14
  • 打赏
  • 举报
回复
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: //进程调用LoadLibrary
g_hInst = (HINSTANCE)hModule;//在这里保存hinstance
case DLL_THREAD_ATTACH: //线程调用LoadLibrary
case DLL_THREAD_DETACH: //线程调用FreeLibrary
case DLL_PROCESS_DETACH: //进程调用FreeLibrary
break;
}
gracezhu 2004-07-14
  • 打赏
  • 举报
回复
应该在DLL_PROCESS_ATTACH时获取,这么写:
HINSTANCE hinst = NULL;

HWND hwndDLG = NULL;



BOOL CALLBACK DlgProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam);

BOOL CALLBACK AboutProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam);

extern "C" __declspec(dllexport) void ShowDlg();



BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch(ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

hinst = (HINSTANCE)hModule;

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧