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?