Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取DLL驻留的路径_C++_Dll - Fatal编程技术网

C++ 获取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

我找到了,但不确定localFunc变量使用什么。我尝试了DLL的文件名,尝试了null和其他一些操作,但返回的状态始终为“未找到文件”。 从MSDN:

lpModuleName[输入,可选] 加载的模块的名称(一个.dll或.exe文件)或模块中的地址(如果dwFlags是GET_module_HANDLE_EX_FLAG_FROM_address)

所以我假设它们只是指普通的文件名,比如“MyControl.dll”,而不是文件的路径,因为我不知道路径。 编辑:添加了实际代码:

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提到的规则(以及更多,但不包括搜索所有连接的驱动器)。