tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
483
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Hallo zusammen!

    Ich habe ein kleines Problem mit einer DLL, welche ich in einer .net Anwendung verwende. In der DLL habe ich die Funktion:
    Code :
    1
    
    void CDumpImpl::DumpTarget(FILE* f)

    Welche geerbt ist von:
    Code :
    1
    
    virtual void IDumpInterface::DumpTarget(FILE*) = 0;

    Den Header habe ich auch in der .net Anwendung.

    Ich lade da die DLL, initialisiere alles und rufe dann folgendes auf:
    Code :
    1
    2
    3
    4
    5
    
    const char* path = (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text).ToPointer();
                 FILE* f = fopen(path, "a");
                 IDump->LoadObjects();
                 IDump->DumpTarget(f);
                 fclose(f);

    Während bei LoadObjects alles gut geht funktioniert dann DumpTarget nicht. f ist zwar ein gültiger Zeiger, aber wenn ich in DumpTarget eine MessageBox mit der Adresse des dortigen Parameters einbaue kommt zwar ein Zeiger mit Adresse raus, allerdings steht "bad_ptr".

    Weiss jemand von euch, warum sämtliche Parameter (std::string, const char*, FILE*, ...) immer ungültig werden mit DumpTarget? Ist das ein Konflikt .net <-> "normales" C++?

    /EDIT:
    Wenn ich jetzt anstelle von FILE* die Parameter in const char* ändere und den Filename mitliefere, so ist vor IDump->DumpTarget(path) der Pfad korrekt, rufe ich in der DLL in DumpTarget eine MessageBox mit dem Parameter auf, so kommt "¬ç|¢. -¨" u.ä. als Text...

    /EDIT2:
    Es scheint ein Problem zwischen .net und normalem C++ zu sein. Verwende ich die DLL in einem Projekt ohne CLR geht alles einwandfrei!

    Gruss
    Cromon
    Geändert von Cromon (14.08.09 um 18:48 Uhr)
     

  2. #2
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Problem gelöst!

    Hab zuerst mal Speicher vom nicht-verwalteten speicher genommen und da dann den Text reinkopiert, das funktionierte dann soweit, allerdings dann der Fehler vom Debugger wegen illegalem hin- und her zwischen verwaltetem und unverwaltetem Code, daher dann:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    #pragma unmanaged
    void Dump(const char* f)
    {
        IDump->LoadObjects();
        IDump->DumpTarget(f);
    }
    #pragma managed

    Dann hat am Schluss alles funktioniert

    Gruss
    Cromon
     

Ähnliche Themen

  1. CGI Parameterübergabe ?
    Von ert18 im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 5
    Letzter Beitrag: 20.12.07, 10:12
  2. DLL-Parameterübergabe
    Von dimi0579 im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 10.09.07, 15:40
  3. parameterübergabe
    Von php_idiot im Forum PHP
    Antworten: 8
    Letzter Beitrag: 21.07.06, 14:52
  4. parameterübergabe
    Von coolsummer im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 22.09.04, 21:20
  5. Parameterübergabe
    Von m_lorenzi im Forum PHP
    Antworten: 6
    Letzter Beitrag: 02.08.01, 11:29