dllimport如何获取非托管dll中哪个应用程序称为函数

时间:2018-09-19 21:52:18

标签: c# c++ callback dllimport dllexport

我有 1个具有 dllexport 功能的非托管C ++ dll 3个托管的C#应用​​程序,它们将非托管DLL函数与 dllimport一起使用,一切正常。

我需要在C ++ dll中知道,如何获取一个值,该值告诉我哪个C#应用程序从外部调用它。

请看下面的图片:

dll image

  
      
  • 现在,当 client.exe 从非托管dll调用 function1 时,将显示一条消息,“ client.exe叫我!”
  •   
  • 现在,当 console.exe 从非托管dll调用 function1 时,将显示一条消息,“ console.exe叫我!”   
  • 现在,当 pure.exe 从非托管dll调用 function1 时,会显示一条消息,提示“ pure.exe叫我!”   

我需要非托管库自己找到它,我不想从C#应用程序发送任何多余的东西,例如获取C#文件路径并将其发送给函数。

可以吗?如果是,该怎么办?

1 个答案:

答案 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