在 DLL 中如何获得主程序的句柄即 hInstance 啊? 再说详细点,我做了一个 DLL,该 DLL 可能被任意程序加载,我如何在 DLL 中获得加载程序的模块句柄?我试过 GetModuleHandle(NULL),得到的句柄和主程序的模块句柄并不相同。期待高手赐教!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 函数开头调用了AFX_MANAGE_STATE(AfxGetStaticModuleState()) ;没?要先转换地址 GetModuleHandle(NULL)的参数指定为调用它的exe的名字。要是不方便确定名字,可以通过dll的导出函数由exe得到自己的句柄直接传给它。 TO handwolf(青松崖): DLL 没有用到 MFC,所以我并不确定能不能那样做。TO idAnts(你才无聊呢): 因为 DLL,并不能确定会被谁加载,所以 EXE 名字没办法确定。 用导出函数传入,这是最简单的解决办法,也最可靠。 但是,如果 EXE 不调用这个函数该怎么办?我要的就是这个,直接在 DLL 中准确的获得加载程序的模块句柄!!!期待高手们赐教~``` 我不知道你倒底要那个 hInstance EXE 名字是可以确定我(用PSAPI) char name[256]; hd=GetCurrentProcess(); //dll与程序一般在同一进程 GetModuleFileNameEx(hd,NULL,name,256); // 得到调用程序名 HMODULE h=GetModuleHandle(name); // 得到 HMODULE但它应该与GetModuleHandle(NULL); 相同你的 "主程序的模块句柄"是指什么?你是怎么得到的?。 方法1: Dll暴露函数,供客户程序传入。方法2: 动态枚举客户程序句柄。 CreateToolhelp32Snapshot Module32First Module32Next 试试。 相当于类似《Windows优化大师》的软件,从中找载入Dll的进程。 资源释放疑惑! 图像重绘怪异错误 用WININET编程访问一些网站12030错误 求tcp数据流重组思路和代码,高人救我!! 关于PowerDesigner的问题 请教一个有关字符串的问题 组件借用ado访问数据库 到底为什么要学vc++?? 各位大虾有没有winsock非阻塞编程的例子? 为何去不到记录值? 咨询关于MP3多种播放方式兼容和性能比较 关于虚存以及内存相关的api
要先转换地址
要是不方便确定名字,可以通过dll的导出函数由exe得到自己的句柄直接传给它。
DLL 没有用到 MFC,所以我并不确定能不能那样做。TO idAnts(你才无聊呢):
因为 DLL,并不能确定会被谁加载,所以 EXE 名字没办法确定。
用导出函数传入,这是最简单的解决办法,也最可靠。
但是,如果 EXE 不调用这个函数该怎么办?我要的就是这个,直接在 DLL 中准确的获得加载程序的模块句柄!!!
期待高手们赐教~```
EXE 名字是可以确定我(用PSAPI)
char name[256];
hd=GetCurrentProcess(); //dll与程序一般在同一进程
GetModuleFileNameEx(hd,NULL,name,256); // 得到调用程序名
HMODULE h=GetModuleHandle(name); // 得到 HMODULE
但它应该与
GetModuleHandle(NULL); 相同你的 "主程序的模块句柄"是指什么?你是怎么得到的?。
Dll暴露函数,供客户程序传入。
方法2:
动态枚举客户程序句柄。
CreateToolhelp32Snapshot
Module32First
Module32Next
试试。
相当于类似《Windows优化大师》的软件,从中找载入Dll的进程。