C++ 获取DLL驻留的路径
我找到了,但不确定localFunc变量使用什么。我尝试了DLL的文件名,尝试了null和其他一些操作,但返回的状态始终为“未找到文件”。 从MSDN: lpModuleName[输入,可选] 加载的模块的名称(一个.dll或.exe文件)或模块中的地址(如果dwFlags是GET_module_HANDLE_EX_FLAG_FROM_address) 所以我假设它们只是指普通的文件名,比如“MyControl.dll”,而不是文件的路径,因为我不知道路径。 编辑:添加了实际代码:C++ 获取DLL驻留的路径,c++,dll,C++,Dll,我找到了,但不确定localFunc变量使用什么。我尝试了DLL的文件名,尝试了null和其他一些操作,但返回的状态始终为“未找到文件”。 从MSDN: lpModuleName[输入,可选] 加载的模块的名称(一个.dll或.exe文件)或模块中的地址(如果dwFlags是GET_module_HANDLE_EX_FLAG_FROM_address) 所以我假设它们只是指普通的文件名,比如“MyControl.dll”,而不是文件的路径,因为我不知道路径。 编辑:添加了实际代码: char l
char localFunc[MAX_PATH]
sprintf_s(localFunc, 52, "MyActiveXComponent.dll");
if (!GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR) &localFunc, &hm))
{
int ret = GetLastError();
OutFile << L"GetModuleHandle returned " << ret << std::endl;
} else {
GetModuleFileNameA(hm, path, sizeof(path));
OutFile << L"Path of dll is:" << path << L"<" << std::endl;
}
char localFunc[MAX\u PATH]
Sprintfus(localFunc,52,“MyActiveXComponent.dll”);
if(!GetModuleHandleExA(获取模块句柄、EX标志未更改、引用计数(LPCSTR)和localFunc、hm))
{
int-ret=GetLastError();
OutFile使用原始名称(如user32.dll)或dll的任何名称调用GetModuleHandle()。获得句柄后,调用GetModuleFileName()以获取包含路径的完全限定名称。调用GetModuleHandle()使用原始名称(如user32.dll)或dll的任何名称。获得句柄后,调用GetModuleFileName()以获取包含路径的完全限定名称。使用原始名称(如user32.dll)或dll的任何名称调用GetModuleHandle()。获得句柄后,调用GetModuleFileName()获取包含路径的完全限定名。使用原始名称(如user32.dll)调用GetModuleHandle(),或使用dll的任何名称。获得句柄后,调用GetModuleFileName()获取包含路径的完全限定名称。如果DLL与可执行文件位于同一路径中,则可执行文件应该能够在没有完整路径的情况下找到它。否则,除非已知DLL是系统范围的(可能不是,除非您使用的是Windows DLL),应用程序需要完整路径或相对路径才能找到它。因为它说的是“或模块中的地址”,这让我相信它可以是模块中任何函数的地址。所以请将void Foo(){}然后传递&Foo,并将GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS添加到dwFlags参数中。@DavidPeterson所以我需要知道DLL的路径才能调用告诉我DLL路径的函数?看起来有点奇怪,所以它可能只适用于Windows DLL,而不适用于用户创建的DLLr第三方DLL?您不需要确切知道DLL的位置来加载它或解析其路径,只要该位置可以通过以下方式解析,其中包括David提到的规则(以及更多,但不包括搜索所有连接的驱动器)。如果DLL与可执行文件位于同一路径中,则可执行文件应该能够在没有完整路径的情况下找到它。否则,除非已知DLL是系统范围的(可能不是,除非您使用的是Windows DLL),否则应用程序将需要完整路径或相对路径才能找到它。因为“或者模块中的地址”,这让我相信它可以是模块中任何函数的地址然后传递&Foo,并将GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS添加到dwFlags参数中。@DavidPeterson所以我需要知道DLL的路径才能调用告诉我DLL路径的函数?看起来有点奇怪,所以它可能只适用于Windows DLL,而不适用于用户创建的DLLr第三方DLL?您不需要确切知道DLL的位置来加载它或解析其路径,只要该位置可以通过以下方式解析,其中包括David提到的规则(以及更多,但不包括搜索所有连接的驱动器)。如果DLL与可执行文件位于同一路径中,则可执行文件应该能够在没有完整路径的情况下找到它。否则,除非已知DLL是系统范围的(可能不是,除非您使用的是Windows DLL),否则应用程序将需要完整路径或相对路径才能找到它。因为它说“或者module中的一个地址“,这让我相信它可以是模块中任何函数的地址然后传递&Foo,并将GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS添加到dwFlags参数中。@DavidPeterson所以我需要知道DLL的路径才能调用告诉我DLL路径的函数?看起来有点奇怪,所以它可能只适用于Windows DLL,而不适用于用户创建的DLLr第三方DLL?您不需要确切知道DLL的位置来加载它或解析其路径,只要该位置可以通过以下方式解析,其中包括David提到的规则(以及更多,但不包括搜索所有连接的驱动器)。如果DLL与可执行文件位于同一路径中,则可执行文件应该能够在没有完整路径的情况下找到它。否则,除非已知DLL是系统范围的(可能不是,除非您使用的是Windows DLL),否则应用程序将需要完整路径或相对路径才能找到它。因为它说“或者module中的一个地址“,这让我相信它可以是模块中任何函数的地址然后传递&Foo,并将GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS添加到dwFlags参数中。@DavidPeterson所以我需要知道DLL的路径才能调用告诉我DLL路径的函数?看起来有点奇怪,所以它可能只适用于Windows DLL,而不适用于用户创建的DLLr第三方DLL?您不需要确切知道DLL的位置来加载它或解析其路径,只要该位置可以通过以下方式解析,其中包括David提到的规则(以及更多,但不包括搜索所有连接的驱动器)。