#include in dll -> crash
-
Hallo,
folgender Header:
#pragma once #include <windows.h> #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT void SomeFunction(); BOOL APIENTRY DllMain (HINSTANCE, DWORD, LPVOID);und folgender Code:
#include "DllMain.h" DLLEXPORT void SomeFunction() { MessageBoxW(NULL, L"Test", L"Test", MB_OK); } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { return TRUE; }.. lässt sich tadellos laden und SomeFunction() lässt sich von der Hostapplikation aus aufrufen.
Füge ich im Header aber folgende Zeile hinzu:
#pragma once #include <windows.h> #include <iostream> <---- #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT void SomeFunction(); BOOL APIENTRY DllMain (HINSTANCE, DWORD, LPVOID);... verabschiedet sich das komplette Programm beim Aufrufen der SomeFunction().
Nebenbei wird die DLL um mehr als 200kb größer, was ich mir durch das einbinden der Cpp-RT erkläre.Ich dachte immer, inkludierte Header sind nur für den Präprozessor bestimmt und können derlei Auswirkungen nicht haben.
Verwendet wird der GCC über MinGW 5.1.3.
Ich würde den Vorgang gern debuggen, nur leider finde ich keine Hilfen zum Debuggen einer DLL mit dem GDB.Hat jemand einen Rat für mich?

-
DLL und EXE gegen die selbe runtime gelinkt?
Derselbe Kompiler benutzt?
-
Ja, Runtime und Compiler sind gleich.
Hier der Loader:typedef void (*fpSomeFunction)(void); ... HMODULE hDll = LoadLibraryW(L"test.dll"); if (hDll == NULL) { std::cout << "Fehler1" << std::endl; } else { fpSomeFunction some = (fpSomeFunction)GetProcAddress(hDll, "SomeFunction"); if (some == NULL) { std::cout << "Fehler2" << std::endl; } else { some(); } }Ich versuche mal, try/catch einzubauen.
-
Ok, hat sich gelöst.
Es war eine Socketexception an einer anderen Codestelle, die zustande kam, weil die DLL eben durch die CRT an Größe zunahm.
-
Wie compilierst du das ganze? Also welche Zeile schreibst du in die cmd...
"gcc -[...]" ?
-
gcc -D DLL_EXPORT -shared -o dll.dll code.h^^ habs gefunden