得到mfc动态库的路径

在郁闷了几个小时之后,终于开朗了,这个世界都开朗了.定位问题的能力是程序员必须的能力

一个mfc的dll,客户想调用这个动态库,这个库要知道自己的路径是在什么位置.

 

问题产生出来了.用得到一个进程的路径只有用

GetModuleFileName(HMODULE ,strPath,MAX_PATH);

第一个参数是模块的句柄

 

开始想到的办法是dllmain里面有一个

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )

第一个参数就是模块的句柄.

但是mfc动态库的dllmain在那里呢.我在vc源代码里面把它找出来.放到工程文件下.编译一个错误.这个错误是说AfxCriticalTerm();  找不到定义.我接着有在vc源代码下找到有这个函数的头文件,把这个文件有放到工程目录下.编译终于通过了.

 

本来想这样用GetModuleFileName和dllmain的hModule就可以得到dll 的当前路径了,得到是得到了,但是一个可怕的问题让我不能理解.dll里面的弹出对话框弹不出来了就是对话况初始化函数都,没有执行/程序运行其他功能还是正常的/

 

这个问题是就是和我加入工程的两个文件有关系.去掉这两个文件就可以了.

 

最终我觉得还是有另一个方法,这个问题我都不知道mfc在底层做了什么手脚.

 

最后的办法是在dll中调用GetModuleFileName(::GetModuleHandle(_T("xxx.dll")),strPath,MAX_PATH);

 

真的是程序深不可测.做什么不好,非要做中国的程序员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值