DLL Parameterübergabe

Cromon

Erfahrenes Mitglied
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:
void CDumpImpl::DumpTarget(FILE* f)

Welche geerbt ist von:
Code:
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:
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
 
Zuletzt bearbeitet:
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:
#pragma unmanaged
void Dump(const char* f)
{
	IDump->LoadObjects();
	IDump->DumpTarget(f);
}
#pragma managed

Dann hat am Schluss alles funktioniert :)

Gruss
Cromon
 
Zurück