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);
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.
Tech Nick
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