Prob mit DLL und c++ :(



  • Hi

    Da ich gerade ein wenig mein Dateihandling für mein Examen lerne. Habe ich mir zum Training ein kleines Projekt ausgedacht.

    Ich hoffe ihr könnte mir helfen. Es ist eine DLL die ich in ein Programm einbaue. Prob ist das immer nen Bug kommt leider net vom Compiler sondern erst wenn ich das ding scon ausführe 😞 Ich hasse diese Fehler!

    Genauerfehler:
    Is ziemlich lang auf jeden Fall so ein AFX Assertion Fehler! Bei Bedarf tippe ich ihn auch ab!

    Quellcode der DLL

    // Zunächst binden wir die Projektheader-Datei ein
    #define _CREATE_DLL_
    #include "TeDa.h"
    #include "iostream.h"
    #include "string.h"
    #include "fstream"    // FileStreams (Damit arbeiten wir ) 
    
    using namespace std;
    
    TEST int create(int spalten,string name) {
    
         fstream datei;
    	 datei.open(name.c_str(),ios::out); 
    	 if(datei.good){
    		 return 1;
    	 }
    
    }
    

    Quellcode der Header

    #include "iostream.h"
    #include "string.h"
    #include "fstream"
    using namespace std;
    
    #ifndef TEST_H_INCLUDED
    
    #define TEST_H_INCLUDED
    
    #ifdef _CREATE_DLL_
    
    // DLL-Export
    
    #define TEST __declspec(dllexport)
    
    #else
    
    // DLL-Import
    
    #define TEST __declspec(dllimport)
    
    // überprüfen ob Debug, oder Release
    
    #ifdef _DEBUG
    
    #pragma comment(lib, "TeDaD.lib")
    
    #else
    
    #pragma comment(lib, "TeDaD.lib")
    
    #endif
    
    #endif
    
    // so, das war das wichtigste, jetzt die Funktion und die Klasse
    
    TEST int create(int spalten,string name);
    
    #endif
    

    Eigentlich ist es ja nur eine Funktion die Exportiert wird. Ich denke mal das einbauen der dll in mein Beispielprogramm habe ich richitg gemacht.

    Einfach die dll mitgelinkt und dann im Quellcode

    create(1,"bla");

    Hoffe es kann mir wer helfen!



  • Tipp mal den Fehler hab... oder noch besser kopier ihn...



  • is nur sone ahnung... versuch ma, die funktion (erstma) erstma so abzuändern, dass du nur ein int übergibst, lass den string ma raus. und dann schreib ma die fehlermeldung auf, die da kommt 😉



  • Debug Assertion Failed

    Program: c: bla...
    File: dbgheap.c
    Line: 1044

    Expression: _CrtIsVaildHeapPointer

    ESIT: Also wenn ich das weg editiere funzt es! Komisch ist nur das die Datei auch mit dem fehler erstellt wird. Nur der Fehler nervt halt weil das Prog dann auch verreckt 😞



  • wenn du was wegeditierst?



  • das

    #define _CREATE_DLL_
    

    würde ich nicht umbedingt in deiner C++ datei definieren sondern in den Projektoptionen.

    In der Implementation steht das auf Export und beim Header auf Import. Ich weiß zwar nicht ob das der Fehler ist, oder nicht aber ich würde das definitv mal ändern.

    Desweiteren bindet man die header so ein:

    #include <iostream>
    #include <string>
    #include <fstream>
    

    und nicht mit .h und ""

    EDIT: Achja und using namespace std:: im header ist auch keine Gute Idee. Das macht man nicht das kann zu problemen führen.

    BR



  • Habe das alles so abgeändert.

    Das Problem liegt direkt bei dem String ich habe es ohne den String proiert und dann ging es!



  • Hallo,

    Klassen (auch STL) sollten eigentlich nie als Wert (oder Referenz) in einer dll-Schnittstelle auftauchen, da eine dll in einen anderen Speicherbereich schreibt und es so schnell zu Zugriffsfehlern kommen kann. Noch schlimmer wird es, wenn dll und aufrufendes Programm von unterschiedlichen Compilern stammen. Da können dann die Klasse auch unterschiedlich implementiert sein.
    Verwende in dll-Schnittstellen nur PODs oder Pointer darauf. Indeinem Fall statt string lieber char*.



  • habe ich auch schon raus gefunden nur wenn ich jetzt von meiner mfc anwendung drauf zugreifen will weiß ich net wie ich nen CString zu nem char bekomme 🙄



  • ich glaube CString hat ne eigene Konvertierungsfunktion. Verusch ma

    CString s = "bla";
    Create(5, (char*(s));


Anmelden zum Antworten