运行时获取DLL路径

我想从代码中得到一个dll的目录(或文件)路径。 (不是程序的.exe文件路径)

我已经尝试了一些我发现的方法:
GetCurrentDir - 获取当前目录路径。
GetModuleFileName - 获取可执行文件的路径。

那么我如何才能找出哪些dll代码在?
我正在寻找类似于C#的Assembly.GetExecutingAssembly


EXTERN_C IMAGE_DOS_HEADER __ImageBase;

....

WCHAR   DllPath[MAX_PATH] = {0};
GetModuleFileNameW((HINSTANCE)&__ImageBase, DllPath, _countof(DllPath));

我将使用GetModuleHandleEx函数并获取DLL中的静态函数的句柄。 你可以在这里找到更多的信息。

之后,您可以使用GetModuleFileName从刚获得的句柄中获取路径。 更多信息在这里。

一个完整的例子:

char path[MAX_PARAM];
HMODULE hm = NULL;

if (!GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | 
        GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
        (LPCSTR) &localFunc, 
        &hm))
{
    int ret = GetLastError();
    fprintf(stderr, "GetModuleHandle returned %dn", ret);
}
GetModuleFileNameA(hm, path, sizeof(path));

// path variable should now contain the full filepath to localFunc

GetModuleFileName()可以在DLL代码中正常工作。 只要确保不要将第一个参数设置为NULL ,因为这将获得调用进程的文件名。 您需要改为指定DLL的实际模块实例。 您可以将它作为DLL的DllEntryPoint()函数中的输入参数,只需将其保存到某个变量中,以备日后使用时使用。

链接地址: http://www.djcxy.com/p/44487.html

上一篇: Get DLL path at runtime

下一篇: Providing path to externals assembly native dll dependecy