2016-08-23 4 views
-2

ich c haben ++ dll, von C# Prozess namens ...DllMain Einspeisepunkt DLL_PROCESS_DETACH

[DllImport(@"My.dll", EntryPoint = "Function1", CallingConvention = CallingConvention.Cdecl)] 
     public static extern bool MyFunction(int id1, int id2, [MarshalAsAttribute(UnmanagedType.LPWStr)] StringBuilder Name); 

Hier ist dll Einstiegspunkt ...

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

ich einen bekommen befestigen und vier detach wie so ...

Attach Detach Detach Detach Detach

Kann jemand erklären warum?

Der Prozess macht nur einen Aufruf an die Funktion.

+0

Warum hat mein Problem eine -1 bekommen? – TEDSON

Antwort

3
case DLL_THREAD_ATTACH: 
case DLL_THREAD_DETACH: 
case DLL_PROCESS_DETACH: 
    std::cout << "Detach" << std::endl; 
    break; 

Ihr Code wird "Detach" in der Konsole schreiben, wenn DLL_THREAD_ATTACH, DLL_THREAD_DETACH oder DLL_PROCESS_DETACH abgefeuert wird. Wenn Sie nur wollen DLL_PROCESS_DETACH hinzufügen break Anweisungen in Ihrer 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; 
} 

oder einfach weglassen ungenutzt Fälle.

+0

Perfekt. Vielen Dank. Gelöst. – TEDSON

Verwandte Themen