Bibliothek erstellen mit Visual C++ 2008 Express



  • Hiho,
    ich habe mal eine Frage was das erstellen einer Bibliothek mit Visual Studio angeht.

    Ich habe mir in Visual Studio ein Dll Projekt angelegt und folgende Klasse geschrieben:

    Header Datei:

    #pragma once
    #include <string>
    
    using namespace std;
    
    class __declspec(dllexport) MyClass {
    public:
    	MyClass();
    	~MyClass();
    	void myMethod(string str);
    };
    

    Cpp Datei:

    #include "StdAfx.h"
    #include "MyClass.h"
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    MyClass::MyClass() { }
    
    MyClass::~MyClass() { }
    
    void MyClass::myMethod(string str) {
    	cout << "myMethod: " << str << endl;
    }
    

    Soweit klappt es auch. Wenn ich kompiliere erhalte eine .lib, .dll und .exp Datei.

    Jetzt habe ich probiert das ganze in einem anderem Projekt zu nutzen. Dazu habe ich folgendes gemacht:
    - .lib Datei in den Linker-Einstellungen bei "zusätzliche Abhängigkeiten" hinzugefügt
    - Das Verzeichnis der .lib Datei bei "zusätzliche Bibliotheksverzeichnisse" hinzugefügt
    - die .dll Datei in das Verzeichnis mit meiner ausführbaren Datei kopiert
    - das Verzeichnis mit der header Datei bei "zusätzliche Includeverzeichnisse" hinzugefügt

    Mein Programmcode mit dem ich testen möchte ob alles funktioniert:

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include "MyClass.h"
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	MyClass mc;
    	string str = "stuff";
    	cout << str << endl;
    	mc.myMethod(str);
    	return 0;
    }
    

    Es gibt keine Fehlermeldungen oder sowas. Allerdings gibt der Aufruf von mc.myMethod(str) nicht wie ich erwartet hätte "myMethod: stuff" aus sondern "myMethod: " gefolgt von willkürlichem Speicherinhalt.

    Was mache ich falsch? 😞

    mfg
    xorm



  • Solch einen Austausch von Objekten und komplexen Klassen funktioniert nur, wenn Du die CRT als DLL Version verwendest! In Deinem Fall darf die CRT nicht statisch gelinkt sein. as gilt auch deswegen, weil Du cout in der DLL verwendest.



  • Danke für die Info. Hab mich mal etwas schlau gemacht in dieser Richtung und weiß jetzt mehr 🙂

    mfg
    xorm


Anmelden zum Antworten