c # — точка входа в DllMain DLL_PROCESS_DETACH

У меня есть 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;
}

Я получаю одно прикрепление и четыре отделяю, как …

Прикреплять
отрывать
отрывать
отрывать
отрывать

Кто-нибудь может объяснить почему?

Процесс делает только один вызов функции.

-2

Решение

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;
}

или просто пропустите неиспользованные случаи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector