Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.435 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: C++ builder / DELPHI DLL - Übergabe von String

  Alt 2. Nov 2016, 09:23
Zitat:
Delphi-Quellcode:
  aDatabase:= TDatabase.create(String(server), String(database),
    String(objecttablename), String(libtablename));
Der harte Cast auf String weist den Compiler an, die Pointer als String zu behandeln. Es findet aber keine Typkonvertierung statt.
Beim Aufrug aus Delphi funktioniert das, da die übergebenen PChar tatsächlich auf existierende Strings verweisen.

Um den Compiler anzuweisen eine Typkonvertierung durchzuführen gibt es verschiedene Wege.

StrPas statt String verwenden, der Compiler erstellt temporäre lokale Variablen selbst:
Delphi-Quellcode:
  aDatabase:= TDatabase.create(StrPas(server), StrPas(database),
    StrPas(objecttablename), StrPas(libtablename));
Selbst lokale Variablen verwenden:
Delphi-Quellcode:
var
  lServer, lDatabase, lObjectTablename, lLibTablename: string;
begin
  lServer := server;
  lDatabase := database;
  lObjectTablename := objecttablename;
  lLibTablename := libtablename
  Result := TDatabase.Create(lServer, lDatabase, lObjectTablename, lLibTablename);
Die Typekonvertierung der Parameter durch Funktionsaufruf:
Delphi-Quellcode:
function _Database_create (const server, database, objecttablename, libtablename: string; bufsvr, bufdb, bufobj, buflib : Word) : TDatabase;
begin
  Result := TDatabase.create(server, database, objecttablename, libtablename);
end;

function Database_create ( server, database, objecttablename, libtablename: PChar; bufsvr, bufdb, bufobj, buflib : Word) : Pointer; stdcall;
begin
  Result := _Database_create(server, database,
    objecttablename, libtablename);
end;
  Mit Zitat antworten Zitat