Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 2. Nov 2016, 10: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