读书人

怎么获取调用动态库的动态库所在路径

发布时间: 2012-03-14 12:01:12 作者: rapoo

如何获取调用动态库的动态库所在路径
有两个动态库A与B,A动态调用了B,不通过从A向B传递参数的方法,如何在B中取得A的路径

[解决办法]
GetModuleHandle("A")取得动态库A的handle,然后调用GetModuleFileName(A的handle, lpFileName, nSize)即可
[解决办法]
GetModuleFileName(),传递A的句柄进去,可以得到它的模块路径
[解决办法]
根据你的被呼叫的函数,计算出函数的返回地址,也就是说函数在呼叫之前,
呼叫方压入堆栈的返回地址。
根据这个地址获取其所在的 DLL 模块句柄。
根据这个 DLL 句柄 获取其完整路径。
[解决办法]
B.dll

#ifdef __cplusplus
extern "C"
#endif
void * _ReturnAddress(void);
#pragma intrinsic(_ReturnAddress)

int funB()
{
HMODULE hCaller = NULL;
TCHAR szModuleName[MAX_PATH];
void *pRetAddr = _ReturnAddress();
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)pRetAddr, &hCaller);
GetModuleFileName(hCaller, szModuleName, _countof(szModuleName));

....

}

读书人网 >VC/MFC

热点推荐