如何在C++中获取同一 dll 内的 dll 位置路径
How can I get dll location path inside the same dll in C++?
假设我有一个dll,叫做MyDll.dll
-
它在 d:\MyWorks\MyDll.dll [它是 directshow dll]
-
我想从 MyDll 代码中获取其位置的路径。
我为此使用了 boost:文件系统
string path = "";
boost::filesystem::path full_path( boost::filesystem::current_path() );
path = full_path.string();
但这给了我它的执行路径,即 C:\Windows\system32,而不是它的位置路径 d:\MyWorks\MyDll.dll。
如何在同一个 dll 中获取 dll 的位置?
更新:通过获取模块:
TCHAR path[2048];
GetModuleFileName( NULL, path, 2048 );
ostringstream file;
file << path ;
string const pathString =file.str();
cout << "Path: " << pathString << endl;
给我一个十六进制的字符串:0049EA95....
在DllMain
中,您会收到一个 HINSTANCE
参数;该参数实际上是 DLL 的HMODULE
,您可以将其与 GetModuleFileName
一起使用以检索 DLL 的完全限定路径。要仅获取包含它的目录,您只需删除文件名(您可以使用 boost::filesystem
、shell 路径函数以及 strrchr
来执行此操作(。
您的问题是尝试在Ansi
控制台输出窗口中查看Unicode
字符串。如果你真的想看到结果,你需要将你的字符串投射到Ansi
(当然会有一些损失(,或者你可以直接使用;
char path[2048];
GetModuleFileNameA(NULL, path, 2048);
cout << path;
如果要使用 Unicode
,请使用 TCHAR
和 GetModuleFileNameW
(或GetModuleFileName
,因为您的应用程序处于 unicode 模式(,但不要尝试输出到控制台窗口而不强制转换为 Ansi
。
您可以使用GetModule文件名来获取模块的完整路径。
第一个参数是所需模块的句柄。 如果此参数为 NULL,则 GetModule文件名将检索当前进程的可执行文件的路径。
如果你想要其他模块的路径,你可以使用 GetModuleHandle 来获取句柄。例如:
TCHAR path[_MAX_PATH+1];
GetModuleFileName(GetModuleHandle(_T("MyDll.dll")), path, sizeof(path)/sizeof(path[0]));
TCHAR s[MAX_PATH+1];
GetModuleFileName(hInstance, s, _countof(s));
其中hInstance
是 DllMain 的参数。尽管名称如此,但它返回完整路径。
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 在向量内的向量上迭代
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 线性丢番图方程 - 求给定区间内的解数和解
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 为什么成员函数内的"this"指针为空?
- 检查框内的 3D 点
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如何在窗口中使用注入的 dll 中的参数调用函数
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在 DLL 内的成员函数中使用互斥/关键节
- 如何在C++中获取同一 dll 内的 dll 位置路径
- 如何在我的DLL内调用我的exe中定义的函数
- 每x秒从.exe内的dll调用函数
- 在c++中使用导入的dll内部类方法