Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Ansprechen einer C++ DLL von Delphi

  Alt 12. Aug 2016, 11:37
"Richtig"
Delphi-Quellcode:
// Deklaration des Aufrufes der C++ DLL mit const char* FileName
procedure loadfile(Target: Integer; FileName: PAnsiChar); cdecl; external 'Digilabs.dll';

// Aufruf der Funktion:
Procedure File_Laden(Name: AnsiString);
Begin
 loadfile(1, PAnsiChar(Name));
 Beep;
end;
Das geht nur, weil AnsiString intern "auch" wie ein PAnsiChar aussieht. (nutze ich auch gern mal bei Header-Übersetzung, um die AutoCasts nutzen zu können)
Und es geht auch nur bei IN-Parametern, die keine Mindestlänge verlangen und nil/NULL sein dürfen.
Ebenso UnicodeString und WideString nach PWideChar und String nach PChar.
Diese Typen habem zwar eine Längenangabe, aber für die Kompatibilität auch zusätzlich noch ein abschließendes #0.
Delphi-Quellcode:
// Deklaration des Aufrufes der C++ DLL mit const char* FileName
procedure loadfile(Target: Integer; FileName: AnsiString); cdecl; external 'Digilabs.dll';

// Aufruf der Funktion:
Procedure File_Laden(Name: String);
Begin
 loadfile(1, Name); // mit Auto-Konvertierung
 loadfile(1, AnsiString(Name)); // mit explizitem Cast (das unterdrückt auch die Warnung ab Delphi 2009, wegen des Unicodes)
 Beep;
end;
$2B or not $2B

Geändert von himitsu (12. Aug 2016 um 23:15 Uhr)
  Mit Zitat antworten Zitat