Zitat von
mjenke:
Die Datentypen scheinen also so in Ordnung zu sein...
Nein, natürlich nicht!
Der Datentyp String (genauer AnsiString) in Delphi ist etwas anderes als der in C/C++ übliche Datentyp "char *".
Die Deklaration müsste also eher so aussehen:
TMPProcessHTML = function (inPath, outPath : PChar ): LongInt; stdcall;
PChar ist ein Zeiger auf char.
Delphi-Quellcode:
procedure TMathType.ProcessHTML;
var
ProcHTML: TMPProcessHTML;
erg : longint;
begin
// *A
if FHandleWLL = 0
then
raise Exception.Create('
MathType DLL nicht geladen');
if self.DLLVersionIsCorrect
then
raise Exception.Create('
MathType DLL Version passt nicht zu dieser Anwendung');
// *B
// die Sicherheitsabfragen zwischen *A und *B lassen sich hervorragend in einer zentralen Methode
// unterbringen
// Durch das Verwenden von Exceptions weiss man genau, was das Problem ist
// ohne Exceptions tappt man im Dunkeln
ProcHTML := GetProcAddress(FHandleWLL, '
MPProcessHTML' );
if not Assigned(ProcHTML)
then
raise Exception.Create('
Funktion MPProcessHTML ist MathType DLL nicht gefunden');
erg := ProcHTML(PChar('
Testdokument.htm'), PChar('
Testdokument_mt.htm'));
end;
PS: zwischen dem Funktionsnamen und der runden offnenden Klammer gehört kein Leerzeichen.
Man sollte die Konventionen von Borland übernehmen.