我不知道该如何解释,但我会尽力的。这是我正在使用的:
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/