Haufen Fragen und keine Ahnung von DLLs ...



  • In letzter Zeit habe ich ausschließlich in C# programmiert, wollte jetzt aber meiner ersten Programmiersprache C++ wieder mehr Zeit widmen und habe natürlich(!) als einfaches Wiedereinführungsprojekt eine DLL erstellen wollen, die ich vielleicht noch in ein bestehendes C#-Projekt einbinden kann. Doch da es (wie gesagt) eine Weile her ist, dass ich das letzte Mal in C++ programmiert habe, habe ich schon die Hälfte vergessen.

    Das hier ist meine Beispiel-DLL:

    #include <iostream>
    void __dcelspec(dllexport) PrintString(char* MyString){std::cout<<MyString<<'\n';std::cin.get();}
    

    Das hier die Schnittstelle (Deklaration, Einbindung und so weiter):

    void __dcelspec(dllimport) PrintString(char* MyString);
    
    int main()
    {
        PrintString("Juhu");
        return 0;
    }
    

    So funktioniert es aber nicht!

    Erstes Problem: Heißt es im DLL-Quellcode export oder import?
    Zweites Problem: Ich wußte mal, dass ich mittels einer pragma-Direktive die *.lib der DLL einbinden muss (korrigiert mich, wenn ich falsch liege). Aber ich habe vergessen, welche das ist, und die Syntax ebenso.
    Drittes Problem: Was mache ich, wenn ich das Ganze in eine Klasse verpacken will? Ich erinnere mich noch an:

    class __dcelspec(dllexport) MyClass
    {
    public:
        void __dcelspec(dllexport) PrintString(char* MyString){/*...*/}
    };
    

    , aber da kann ich mich auch kolossal irren. Ich verwende Visual Studio 2005.

    Ich habe zu spät gemerkt, dass ich zuerst im falschem Forum war (Dos und so), deshalb ist dieser Thread eine kleine Kopie ...



  • Das Schlüsselwort heisst schonmal '__declspec' und nicht '__dcelspec'.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Bibliothek bindest du mittels

    #pragma comment(lib,"deinedatei.lib")
    

    ein.

    Da ich vom handy aus schreibe, kann ich dir den Rest gerade nicht beantworten. Ach ja, in den source der dll kommt das dllexport, ja.

    Mfg



  • Vielleicht bist du hier im WinApi-Forum auch falsch, wenn du für eine Konsolen-Anwendung eine DLL machen willst. Für eine Windows-Anwendung bist du hier schon richtig.


Log in to reply