Ich drehe mich hier gerade im Kreis und komme einfach nicht weiter.
Ich habe folgende Prozedur (DBXDynalink des DBX Frameworks)
Delphi-Quellcode:
procedure TDBXDynalinkRow.GetAnsiString(DbxValue: TDBXAnsiStringValue;
var AnsiStringVar: TDBXAnsiStringBuilder;
var IsNull: LongBool);
var
DBXResult: TDBXErrorCode;
begin
DBXResult := FMethodTable.FDBXRow_GetString(
FRowHandle, DbxValue.ValueType.Ordinal, AnsiStringVar, IsNull
);
if DBXResult <> TDBXErrorCodes.None then
FMethodTable.RaiseError(FDBXContext, DBXResult, FRowHandle);
end;
Wie man hier sehr schön sehen kann, ist der Parameter "AnsiStringVar" als Referenzvariable angegeben. Innerhalb der VendorLib (
DLL) sieht die Deklaration folgendermaßen aus:
Delphi-Quellcode:
function DBXRow_GetString(
Handle: TDBXRowHandle;
Ordinal: TInt32; Value: TDBXAnsiStringBuilder;
out IsNull: LongBool):TDBXErrorCode;
stdcall;
begin
Result:=TDBXErrorCodes.None;
end;
Also nicht als "out" gekennzeichnet. Ok, also wird der Zeiger übergeben und ich soll jetzt den zu übergebenen String an die entsprechende Speicherstelle schreiben. Aber wie? da kommt nie etwas zurück. Wieso haben die Chaoten von Embarcadero das so deklariert?! Bei allen anderen Get-Methoden ist beim Value immer "out" angegeben, nur hier an dieser Stelle nicht!
Ich habe folgendes ausprobiert (ohne Erfolg):
Move(text, Value, length(text));
TDBXAnsiStringBuilder = PAnsiChar;
Hoffe ihr habt da eine Idee für mich.