得到mfc动态库的路径

来源:互联网 发布:淘宝主图怎么制作教程 编辑:程序博客网 时间:2024/05/22 07:39

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

一个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);

 

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

原创粉丝点击