У меня есть C ++ DLL, вызванный из процесса C # …
[DllImport(@"My.dll", EntryPoint = "Function1", CallingConvention = CallingConvention.Cdecl)]
public static extern bool MyFunction(int id1, int id2, [MarshalAsAttribute(UnmanagedType.LPWStr)] StringBuilder Name);
Вот точка входа в DLL …
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
std::cout << "Attach" << std::endl;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
std::cout << "Detach" << std::endl;
break;
}
Я получаю одно прикрепление и четыре отделяю, как …
Прикреплять
отрывать
отрывать
отрывать
отрывать
Кто-нибудь может объяснить почему?
Процесс делает только один вызов функции.
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
std::cout << "Detach" << std::endl;
break;
Ваш код будет писать «Отсоединить» в консоли, когда DLL_THREAD_ATTACH
, DLL_THREAD_DETACH
или же DLL_PROCESS_DETACH
уволен. Если вы хотите только DLL_PROCESS_DETACH
добавлять break
заявления в вашем switch
:
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
std::cout << "Attach" << std::endl;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
std::cout << "Detach" << std::endl;
break;
}
или просто пропустите неиспользованные случаи.
Других решений пока нет …