Zitat von
Berni68:
PAnsiChar musste ich zu PWideChar ändern, sonst lässt's sich nicht kompilieren.
Da PChar unter D5 PAnsiChar entsprach und somit die
DLL ANSI als Schnittstelle bereitstellte,
mußt du die Schnittstelle auch weiterhin als
ANSI zur Verfügung stellen und demnach mit PAnsiChar arbeiten.
Wenn es sich so aber nicht kompilieren läßt, dann mußt du es Intern so ändern, daß es geht.
Die Schnittstelle
darf nicht verändert werden.
Delphi-Quellcode:
function DateiLoeschen(Dateiname: PAnsiChar): LongBool;
stdcall;
begin
Result := Windows.DeleteFileA(Dateiname);
// ^ ANSI-Version
end;
egal welche Delphi-Version, es ist bei der
WinAPI immer so geregelt:
die beiden Funktionen, welche die
WinAPI bereitstellt
DeleteFileA =
Ansi
DeleteFileW =
Unicode
DeleteFile = eine Umleitung zu einer der beiden anderen Funktionen,
jenachdem welcher Compiler und Optionen verwendet werden.
D5 ist "nativ" ein
Ansi-Compiler und leitet demnach DeleteFile nach DeleteFile
A um
und D2009 ist "nativ" ein
Unicode-Compiler und leitet somit DeleteFile nach DeleteFile
W um.
Zitat:
die
dll wird in Firebird erkannt, tut aber nicht was sie soll!
Ist auch klar, da die Schnittstelle jetzt anders ist.
Firebird schickt dir einen AnsiString aka PAnsiChar
und du wertest dieses aber wie einen PWideChar aus.
Eine
DLL gibt nach außen nur den Funktionsnamen, eventuell eine ID/Index und den nötigen Eintritspunkt bekannt, aber über den Aufbau der Schnittstelle kann man nicht erfahren, darum dürfen Schnittstellen "nie" verändert werden (solange man nicht beide Seiten gleichzeitig umbaut und eine Vermischen, der alten und neuen Version, nich 100%ig ausschließen kann).