2016-10-22 6 views
0

stackoverflower ich ein Problem habe, so habe ich eine Anwendung in Windows Form, aber jetzt will ich es machen zeigen becouse ich es sein eine dynamische Bibliothek kein executeable iknow injizieren, die Sie diese winapi für verwendenWindows DllMain dynamische Bibliothek

BOOL APIENTRY DllMain(HMODULE hModule, 
    DWORD ul_reason_for_call, 
    LPVOID lpReserved 
    ) 
{ 
    switch (ul_reason_for_call) 
    { 
    case DLL_PROCESS_ATTACH: 
     DisableThreadLibraryCalls(hModule); 
     CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&showform, NULL, 0, 0); 
     break; 
    case DLL_THREAD_ATTACH: break; 
    case DLL_THREAD_DETACH: break; 
    case DLL_PROCESS_DETACH: break; 
    } 
    return TRUE; 
} 

und ich versuchte, das für Windows-Formular

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 
{ 
    if (fdwReason == DLL_PROCESS_ATTACH) 
    { 
     DisableThreadLibraryCalls(hinstDLL); 
      hProcessCenter = ::FindWindow(NULL, _T("WINDOW")); 

    } 
    return 1; 
} 

ich bin gettings diese Fehler für Windows-Formular:

Fehler 1 Fehler C3641: ‚DllM ain': ungültige Aufrufkonvention '__stdcall' für die Funktion mit/clr zusammengestellt: rein oder/clr: safe

Fehler 2 Fehler C2065: 'hProcessCenter': nicht deklarierter Bezeichner

Fehler 3 Fehler C3861: '_T': Kennung nicht gefunden

ich hoffe, dass jemand mir

Antwort

0

Gut für Fehler 1, helfen kann ich zum Beispiel in der akzeptierten Antwort hier für die richtige umfasst beziehen würde: How to specify dll onload function for mingw32?

Fehler 2 sagen, dass Sie n um "hProcessCenter" in Ihrer DllMain (...) Funktion irgendwo zu definieren. Wahrscheinlich, da Sie die Variable nicht irgendwo verwenden, können Sie die Zeile in ::FindWindow(NULL, _T("WINDOW")); konvertieren, um kompilierbaren Code zu haben.

Für Fehler 3 müssen Sie sicher sein, mit Unicode-Unterstützung zu kompilieren. Andernfalls wird das Makro nicht gefunden (What does _T stands for in a CString).

+0

bekomme ich jetzt Dieser Fehler – Arix

+0

Fehler Fehler LNK1306: DLL-Einstiegspunkt "int __clrcall main (CLI :: Array ^)" (? main @@ $$ HYMHP $ 01AP $ AAVString @ System @@@ Z) kann nicht verwaltet werden; kompilieren zu nativen – Arix

+0

@Neevo Lima Makro _T kann verwendet werden, um sowohl ANSI und UNICODE-Anwendungen und es wird in tchar.h – Asesh

0

zu korrigieren Fehler # 1 in den einheitlichen Code kompilieren sollte, anstatt

verwaltet

Fix für Fehler # 2:

HWND hProcessCenter; 
if (fdwReason == DLL_PROCESS_ATTACH) 
{ 
    DisableThreadLibraryCalls(hinstDLL); 
     hProcessCenter = ::FindWindow(NULL, _T("WINDOW")); 

} 

Fix für Fehler # 3:

#include <tchar.h> 
+0

deklariert hmm ich bekomme immer noch Fehler das ist der Code [STAThreadAttribute] int main (Array ^args) { \t // Aktivieren der visuellen Effekte von Windows XP vor dem Erstellen von Steuerelementen \t Application :: EnableVisualStyles(); \t Anwendung :: SetCompatibleTextRenderingDefault (false); \t // Erstellen Sie das Hauptfenster und führen Sie es \t Application :: Run (gcnew Form1()); \t Rückgabe 0; } DLL-Einstiegspunkt "int __clrcall main (cli :: array ^)" (? Haupt @@ $$ HYMHP $ 01AP $ AAVString @ [email protected]@@ Z) nicht verwaltet werden ; Kompilieren zu nativen – Arix

+0

Sieht aus, als ob Sie C++/CLI verwenden – Asesh

+0

Ja ich benutze C++ - Windows Form mit C++ Winapi Wie kann ich das beheben ?? – Arix

Verwandte Themen