Neues Thema starten

Offene Transaktionen auslesen (Swissbit)

Hallo!


Das Ermitteln der offenen Transaktionen bereitet uns auch noch Schwierigkeiten. Wir schaffen es scheinbar nicht, den Speicher für das Array der transactionNumbers korrekt zu übergeben/auszulesen.


PInvoke-Definition:


private static extern int worm_transaction_listStartedTransactions(IntPtr context, string clientId, int toSkip, IntPtr transactionNumbers, int transactionNumbersLength, out int storedTransactionNumbers);


Zum Auslesen verwenden wir folgendes. Nur, wie kommt man nun zur Liste? Nach dem umkopieren des Pointers in das Byte-Array ist dieses fast leer.


var txArray = new byte[62];
IntPtr unmanagedPointer = Marshal.AllocHGlobal(txArray.Length);
var result = worm_transaction_listStartedTransactions(worm_context, clientId, 0, unmanagedPointer, 62, out var size);
if (result == 0)
{
   Marshal.Copy(unmanagedPointer, txArray, 0, size);
   // txArray ist "fast" leer? wie komm man zur liste?
   Marshal.FreeHGlobal(unmanagedPointer);
}


2 Personen haben diese Frage

Danke @Maximilian Grießer für die Lösung. Es geht eh so einfach - PInvoke die ganze Magic machen lassen:


var numbers = new worm_uint[62];
err = worm_transaction_listStartedTransactions(context, null, 0, numbers, 62, out var stored);


1 Person gefällt dies

Hey Tech Nick,

wie kommst du an "worm_uint" ran?


Viele Grüße


 Wird eben "automatisch" befüllt - die Magic macht PInvoke für dich. wennst die zwei Zeilen Code von oben nutzt,  ist das Array "numbers" befüllt.

Anmelden oder Registrieren um einen Kommentar zu veröffentlichen