我自己用C++写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径.
大概就是这么个结构,
我自己封装了一个函数.只适用于window编程,因为里面用到了windows系统的函数,
#include <map>
#include <string>
#include <vector>
#include <memory>
#include <fstream>
#include <Windows.h>
#include <iostream>
#include <functional>
#include <filesystem>
#if _MSC_VER >= 1910
using FileSysPath = std::filesystem::path;
using FileSysDirIter = std::filesystem::directory_iterator;
#define FileSys std::filesystem
#elif _MSC_VER >= 1900
using FileSysPath = std::tr2::sys::path;
using FileSysDirIter = std::tr2::sys::directory_iterator;
#define FileSys std::tr2::sys
#endif
std::string GetPluginConfigFilePath()
{
std::string strConfigPath = "";
char szBuff[MAX_PATH] = { 0 };
GetModuleFileName(GetSelfModuleHandle(), szBuff, MAX_PATH);
for (auto const& dir_entry : FileSys::recursive_directory_iterator{ FileSysPath(szBuff).parent_path()})
{
auto tempFilePath = dir_entry.path();
if (FileSys::is_regular_file(tempFilePath))
{
if (tempFilePath.extension().generic_string() == ".json")
{
strConfigPath = tempFilePath.string();
break;
}
}
}
return strConfigPath;
}
HMODULE GetSelfModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}
至于通用的方式,以后用到了再研究研究纯C++怎么获取dll路径.