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