我不知道该如何解释,但我会尽力的。这是我正在使用的:

C++:

extern "C" __declspec(dllexport) void c(char path[])
{
    //some code with the path.
}

C#:
[DllImport("DLL")]
static extern void c(char[] path);

如您所见,我正在使用c++的导出函数。
我的问题是,是否有一种更简单的方法可以从DLL 中获取应用程序的路径,而无需将其作为参数传递给导出的函数?

最佳答案

这确实很容易,但是需要预先考虑:

首先要做的是在本机DLL中实现DllMain,它将在DLL加载时缓存模块的句柄。看起来像:

EXTERN_C BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_opt_ LPVOID lpvReserved)
{
    UNREFERENCED_PARAMETER(lpvReserved);

    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hinstDLL);

        g_Handle = hinstDLL;
    }

    return TRUE;
}

稍后,当您想获取名称时,只需调用 GetModuleFileName ,如下所示:
TCHAR dllName[MAX_PATH + 1];
GetModuleFileName(g_Handle, dllName, MAX_PATH);

如果要调用它,唯一复杂的部分是存储DllMain的句柄。调用GetModuleHandle(NULL)将为您提供执行模块的句柄,而不是DLL(与C#中的GetExecutingAssembly相同)。

关于c++ - 如何获得当前的执行装配路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9166324/

10-12 07:36
查看更多