我有 1个具有 dllexport 功能的非托管C ++ dll 和 3个托管的C#应用程序,它们将非托管DLL函数与 dllimport一起使用,一切正常。
我需要在C ++ dll中知道,如何获取一个值,该值告诉我哪个C#应用程序从外部调用它。
请看下面的图片:
- 现在,当 client.exe 从非托管dll调用 function1 时,将显示一条消息,“ client.exe叫我!”
- 现在,当 console.exe 从非托管dll调用 function1 时,将显示一条消息,“ console.exe叫我!”
- 现在,当 pure.exe 从非托管dll调用 function1 时,会显示一条消息,提示“ pure.exe叫我!”
我需要非托管库自己找到它,我不想从C#应用程序发送任何多余的东西,例如获取C#文件路径并将其发送给函数。
可以吗?如果是,该怎么办?
答案 0 :(得分:0)
这应该有效:
constexpr DWORD bufsize = 32768;
WCHAR *calling_application = new WCHAR [bufsize];
DWORD nSize = GetModuleFileNameW (NULL, calling_application, bufsize);
if (nSize == 0 || nSize == bufsize)
{
// panic, should never happen
}
// ...
delete [] calling_application;
此处的文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197%28v=vs.85%29.aspx