在封装dll的程序中,经常需要在dll程序中读取配置文件或者是保存中间结果,为了减少这些路径的由上层调用程序传入,我们经常会要求将配置文件跟dll放在一起即可,然后让程序自动获取到配置文件的位置:程序中在读取配置文件时的先获取自身dll所在的路径(*****.dll),然后根据该路径信息和配置文件的名称即可读取相应的配置文件。另外,中间结果保存路径,我们是只是想办法直接把中间结果保存在dll相同的路径下,不再需要用户再进行设置,我们在dll所在的路径下保存中间结果即可。
故我们需要能够获取dll的完整路径,然后根据该路径信息即可实现上述想法。
windows下获取dll的完整路径方法如下:
#include <windows.h>
#include <string>
//windows下获取当前dll的句柄
HMODULE GetSelfModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}
//在程序中通过调用该函数即可获取到dll的完整路径至strDllFullPath中
void GetFullPathOfDll(std::string& strDllFullPath)
{
char szPath[MAX_PATH];
GetModuleFileNameA(GetSelfModuleHandle(),szPath,MAX_PATH);
strDllFullPath = std::string(szPath);
}
windows 使用MAX_PATH(260)来分配路径字符数
windows最长的文件夹长度为247个字节,最后11个字节留给文件名和扩展名使用。