AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Swissbit DLL - Diverse Fragen

Ein Thema von hhcm · begonnen am 16. Dez 2019 · letzter Beitrag vom 13. Jul 2023
 
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Swissbit DLL - Diverse Fragen

  Alt 18. Dez 2019, 16:57
Danke, das funktioniert.


Jetzt dachte ich, langsam hab ich die API komplett verstanden, jetzt häng ich schon wieder seit Stunden an den Transaktionen.
Eine Lognachricht wird in der TSE gespeichert, ich bekomme aber kein WormTransactionResponse hin.
Eigentlich habe ich soweit das C# Programm nachgeahmt - heißt - alles in Klassen verpackt.

Delphi-Quellcode:
function worm_transaction_response_new(context: IntPtr): IntPtr; cdecl; external 'WormAPI.dll';
procedure worm_transaction_response_free(const response_pointer: IntPtr); cdecl; external 'WormAPI.dll';
function worm_transaction_response_transactionNumber(const response_pointer: IntPtr): worm_uint; cdecl; external 'WormAPI.dll';
function worm_transaction_start(context: IntPtr; clientId: PAnsiChar; processData: PByte; processDataLength: worm_uint; processType: PAnsiChar; response: Pointer): Integer; cdecl; external 'WormAPI.dll';

type
  WormTransactionResponse = class
  private
    response_pointer: IntPtr;
  public
    constructor Create(worm_context: IntPtr);
    destructor Destroy; Override;
    function TransactionNumber: worm_uint;
  end;

implementation

constructor WormTransactionResponse.Create(worm_context: IntPtr);
begin
  response_pointer := worm_transaction_response_new(worm_context);
  // Hier bekomme ich eine Adresse.
end;

destructor WormTransactionResponse.Destroy;
begin
  worm_transaction_response_free(response_pointer);
  inherited;
end;

function WormTransactionResponse.TransactionNumber: worm_uint;
begin
  result := worm_transaction_response_transactionNumber(response_pointer);
end;

...

var
  res: Integer;
  Response: WormTransactionResponse;
  transId: worm_uint;
begin
  Response := WormTransactionResponse.Create(worm_context); // Hier ist Response scheinbar gültig
  // Mache ich hier Response.Free ist alles gut. Heisst ich habe eine gültige Adresse.
  try
    res := worm_transaction_start(worm_context, PAnsiChar(clientId), nil, 0, PAnsiChar(processType), @Response);
    // res ist 0 . Aber die Adresse von Response hat sich verändert

    if (res <> 0) then
      raise EWormException.Create(res);

    transId := Response.TransactionNumber; // Hier Krachts, da Response auf eine falsche Adresse zeigt.
  finally
     Response.Free;
  end;

end;
Hat da jemand eine Erklärung zu?
Chris
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz