Frage zu FAQ-Beitrag "DLL"



  • N'Abend
    Habe mir die Beschreibung fürs erstellen der Lib durchgelesen. Ich binde den Header ein, und auch die Lib (via #pragma comment (libs, "")). Es wird alles Fehler- und Warnungslos compiliert, aber trotzdem sagt er mir, dass wenn ich das Programm starte, die Anweisugn 0xc0000142 o.ä nicht initialisiert werden konnte, also mein Programm nicht startet. Ich habe auch schon die Lib zu linken, aber auch erfolglos. Kann mir jemand sagen, was ich falsch mache?

    Mfg Ominion

    PS: Bitte nicht ins Compilerforum verschieben, da selbst auf dem Mond mehr aktive Menschen sind, als in diesem Subforum...



  • Hi,

    Welche IDE benutzt du ?



  • Oh sry vergessen...das gleich wie in dem Beitrag Borland command-line Compiler...auf deutsch keine^^

    Mfg Ominion



  • Kein Problem 🙂

    Sorry, aber mit dem Borland kenne ich mich leider nicht aus, warte mal auf die anderen, die helfen dir bestimmt.

    Grüße,

    mikey.



  • Zeig mal den kompletten Quelltext (falls er schon umfangreicher ist, nur die relevanten Teile).



  • Von der Dll? Oder vom Programm? Ob ich dir nun den Quellcode gebe oder sage was ich gemacht habe, ist relativ egal, da das nur ein Funktionsaufruf ist...
    So binde ich das ein

    ...
    #include "header/dll.h"
    ...
    #pragma comment (lib, "dll.lib")
    ...
    DllFunktion ();
    

    dll.h:

    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec (dllexport)
    #else
    #define EXPORT __declspec (dllexport)
    #endif
    
    EXPORT void _stdcall DllFunktion ();
    

    dll.cpp:

    #include <windows.h>
    #include "dll.h"
    
    int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
    	return 0;
    }
    
    EXPORT void _stdcall DllFunktion (HWND hWnd, LPSTR lpText)
    {
        MessageBox (NULL, "DLL-Test", "MessageBox", MB_OK);
    }
    

    Mfg Ominion



  • Zweimal dllexport?



  • Einmal, wenn die DLL mit C++ verwendet wird, und einmal wenn sie mit C verwendet wird.

    Mfg Ominion



  • In der EXE solltest du schon dllimport benutzen.



  • Also ich weiß jetzt nicht wie du das meinst...aus dll.h und dll.cpp entsteht die DLL. In der EXE benutze ich das garnicht, sondern nur die Funktion.

    Mfg Ominion



  • #pragma comment ist AFAIK eine Erweiterung des Microsoft-Compilers. Beim BCC kannst du stattdessen #pragma link "..." verwenden. Alternativ funktioniert das auch über Compiler-Switches (einfach bcc32 mal mit dem Parameter /? aufrufen und schauen).



  • Hat leider gar nichts gebracht...hatte den gleichen Effekt wie mit #pragma comment

    Mfg Ominion



  • Ominion schrieb:

    aus dll.h und dll.cpp entsteht die DLL. In der EXE benutze ich das garnicht

    Du bindest doch die dll.h in der EXE ein, oder ist das eine andere Datei?



  • Ja da hast du Recht...aber wo soll ich das denn sont hinschreiben? Oder soll ich nen neuen Header nur für das Programm machen?

    Mfg Ominion



  • habe das jetzt schon vor längerem so gemacht, wie ich es selbst vorgeschlagen habe, hat aber auch nichts geholfen.

    Mfg Ominion

    PS: *push*



  • Also ich erinnere mich, dass man beim dynamischen Linken den Funktionsnamen mit einem "_" versehen musste, wenn man die DLL mit dem Borland Compiler erstellt hat. Quasi so:

    //DLL.cpp
    
    DLLEXPORT void MyFunc (...)
    ...
    
    //App.cpp
    ...
    <pFunc> = GetProcAddress(<hDll>, "_MyFunc")
    ...
    

    Bei mit einem Microsoft Compiler erstellten DLLs ist das nicht nötig.

    Ich weiss nicht, ob das Auswirkungen auf das statische Linken hat, aber ich wollte es mal erwähnen.

    Vielleicht hilft dir das ja.

    Maffe



  • Also irgendwie funktioniert gar nichts, was das anbelangt...
    Ich habe da jetzt mal eine bitte:
    Wenn jemand auch mit den Borland Command-Line Compiler 5.5.1 arbeitet und funktionierende Libs erstellen kann, kann der bitte mal die Compiler-Anweisungen und Source für die DLL und das Programm wo die benutzt wird posten? Also ein Punkt davon würde ja auchschon gut sein

    DIV Ominion


Anmelden zum Antworten