很多人一直搞不明白DLL的搜索路径,为了验证DLL的搜索路径,于是写了一个DLL,调用后即可获取它本身所在路径,这样就不用纠结了。
- 头文件声明
#ifndef EXPORT_MY_DLL
#define EXPORT_MY_DLL
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
extern "C"
{
MY_API int WINAPI GetCurrModulePath(int type,char* ptrOut);
}
- 函数体定义
HMODULE GetSelfModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}
MY_API int WINAPI GetCurrModulePath(int type,char* ptrOut) {
setlocale(LC_ALL, "");
char curDir[MAX_PATH] = { 0 };
int len;
TCHAR lpFilename[MAX_PATH];
HMODULE hModule;
if (type == 1) {
hModule = GetSelfModuleHandle();
GetModuleFileName(hModule, lpFilename, MAX_PATH);
}
else {
GetModuleFileName(NULL, lpFilename, MAX_PATH);
}
sprintf_s(curDir, "%S", lpFilename);
len = sizeof(curDir) + 1;
strcpy_s(ptrOut, len, curDir);
return 1;
}
- 导出文件
; YSYMFCLibrary.def: 声明 DLL 的模块参数。
LIBRARY YSYMFCLibrary
EXPORTS
; 此处可以是显式导出
GetCurrModulePath @1