Thema: Delphi dll Kompatibilität

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: dll Kompatibilität

  Alt 11. Apr 2010, 10:13
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 DeleteFileA um
und D2009 ist "nativ" ein Unicode-Compiler und leitet somit DeleteFile nach DeleteFileW 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).
$2B or not $2B
  Mit Zitat antworten Zitat