Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DBX4 - innerhalb der VendorLib String zurückgeben (https://www.delphipraxis.net/157368-dbx4-innerhalb-der-vendorlib-string-zurueckgeben.html)

omata 9. Jan 2011 23:01

DBX4 - innerhalb der VendorLib String zurückgeben
 
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):
Delphi-Quellcode:
  Move(text, Value, length(text));

TDBXAnsiStringBuilder = PAnsiChar;

Hoffe ihr habt da eine Idee für mich.

omata 9. Jan 2011 23:10

AW: DBX4 - innerhalb der VendorLib String zurückgeben
 
Ok, nach langem herumprobieren habe ich es jetzt geschafft. Der isNull-Parameter musste noch auf "False" gesetzt werden :wall:

Danke fürs zuhören.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz