在C++/CLI中获取dll的模块文件名的首选方法

hum*_*mba 1 winapi c++-cli

我有一个C++/CLI DLL,我想知道Win32 API函数的首选替代方案是什么GetModuleFilename.我找到了Assembly::GetExecutingAssembly()->ManifestModule->FullyQualifiedName(MSDN).这似乎有效,但我想知道是否有不同或"更好"的方式.当然,我知道在技术上没有什么禁止我GetModuleFilename直接使用,但我讨厌混合不同的API,这也需要创建一个字符串缓冲区,然后我必须转换回一个System::String.我知道它只有两行代码但仍然...... ;-)

Han*_*ant 5

不要使用GetModuleFileName(),.NET 4.0 CLR删除了一些appcompat代码,使加载的程序集类似于常规DLL.此外,HMODULE很麻烦,你不能使用VirtualQuery技巧将代码地址转换为HMODULE.

Assembly::GetExecutingAssembly()->Location 为您提供了装配当前方法的IL的装配的完整路径.