dllimport как узнать, какое приложение вызвало функцию в неуправляемой dll

У меня есть 1 неуправляемый C++ dll с функциями dllexport и 3 управляемых приложения C#, которые используют неуправляемые dll-функции с dllimport, ладно, все работает отлично.

Мне нужно знать в C++ dll, как я могу получить значение, которое говорит мне, какое приложение C# вызвало его извне.

пожалуйста, посмотрите на изображение ниже:

изображение длл

  • теперь, когда client.exe вызывает function1 из неуправляемой dll, появляется сообщение "client.exe позвонил мне!"
  • теперь, когда console.exe вызывает function1 из неуправляемой dll, появляется сообщение "console.exe позвонил мне!"
  • теперь, когда pure.exe вызывает функцию function1 из неуправляемой dll, появляется сообщение "pure.exe позвонил мне!"

Мне нужно, чтобы неуправляемая библиотека обнаруживала ее самостоятельно, я не хочу отправлять что-либо дополнительное из приложения C#, например, получение пути к файлу C# и отправлять его в функцию.

Это возможно? если да, как я могу это сделать?

1 ответ

Решение

Это должно работать:

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

Другие вопросы по тегам