![]() |
Swissbit DLL - Diverse Fragen
Hallo zusammen,
da sich ja manche schon als Nutzer der Swissbit TSE "geoutet" haben, werde ich hier vielleicht die ein oder andere Frage los. Nachdem ich 10x in der Doku überlesen habe, dass der erste Selbsttest mit einem Fehler abschmiert und das völlig in Ordnung ist, ging es auch weiter. Selbst-Test, Setup, Diverse Info´s auslesen, Zeit updaten, Einloggen - Soweit so gut. Ich versuche jetzt seit Stunden das Log-Zertifikat auszulesen
Code:
( wurde bisher in der gefühlt 100 Fassung zu )
WORMAPI WormError WORMAPI_CALL worm_getLogMessageCertificate (
WormContext * context, unsigned char * certificate, uint32_t * certificateLength )
Delphi-Quellcode:
function worm_getLogMessageCertificate(context: IntPtr; out certificate: PBytes; out certificateLength: PUInt32): Integer; cdecl; external 'WormAPI.dll';
Egas was ich anstelle, entweder gibt entweder eine AV oder das Result ist WORM_ERROR_INVALID_PARAMETER. In der Doku steht, das man den Buffer (in dem Fall certificate) selbst initialisieren muss. Selbst da habe ich von GetMem bis SetLength mit den unterschiedlichsten Typen alles durch. Hat da jedmand mal nen Tip? |
AW: Swissbit DLL - Diverse Fragen
Bei mir ist Certificate als PByte deklariert (ohne out). Ich rufe dann die Funktion einmal mit nil auf, um die Länge zu ermitteln, reserviere mir dann mit GetMem den entsprechenden Speicher und rufe die Funktion erneut mit dem entsprechenden Pointer auf. Zum Schluss das FreeMem nicht vergessen.
|
AW: Swissbit DLL - Diverse Fragen
Ich glaub das jetzt nicht. Das hab ich 5x ausprobiert. Sowohl mit PBytes als auch PByte.
Das zweimalige aufrufen steht bei mir schon die ganze Zeit im Code. Die Länge habe ich auch immer zurück bekommen. Der zweite Aufruf wurde immer mit einer AV gekrönt. Warum auch immer, jetzt gehts. Danke ! |
AW: Swissbit DLL - Diverse Fragen
Hat schon mal jemand einen "extrahierbaren" Tar Export hinbekommen?
Ich bekomme keine Fehler aber das Tar-Archiv lässt sich mit keinem Programm extrahieren.
Delphi-Quellcode:
TWormExportTarCallback = function(chunk: PBytes; chunkLength: Cardinal; callbackData: PBytes): Integer; cdecl;
function worm_export_tar(context: IntPtr; callback: TWormExportTarCallback; callbackData: Pointer): Integer; cdecl; external 'WormAPI.dll'; |
AW: Swissbit DLL - Diverse Fragen
Bei mir sieht das so aus:
Delphi-Quellcode:
Anschließend erzeuge ich einen MemoryStream und übergebe diesen als CallbackData an worm_export_tar.
// TChunkLength = UINT32
function Callback(const Chunk: PByte; ChunkLength: TChunkLength; CallbackData: Pointer): integer; Cdecl; var Stream: TMemoryStream; begin Stream := TMemoryStream(CallbackData); Stream.Write(Chunk^, ChunkLength); Result := 0; end;
Delphi-Quellcode:
Stream := TMemoryStream.Create;
try worm_export_tar(Context, Callback, Stream); finally Stream.Free; end; |
AW: Swissbit DLL - Diverse Fragen
Dann muss es was anderes sein.
Auch in dieser Variante sagt 7-Zip mir, Die Datei kann nicht als Archiv geöffnet werden. Entpacken über Linux bringt mich aber glaube ich weiter.
Code:
time stamp 2019-12-18 09:07:44 is 3133.460484916 s in the future
|
AW: Swissbit DLL - Diverse Fragen
Hast Du die aktuelle Version von 7-zip? Ich hatte auch erst eine veraltete, die aktuelle kann aber mit dem Archiv umgehen.
|
AW: Swissbit DLL - Diverse Fragen
Ich habe da auch noch einige Probleme mit meiner Swissbit-TSE.
Es geht einiges: Reset, Init,Setup, Settime, Transactionen, Seriennummer auslesen, PublicKey auslesen. Was (noch) nicht geht ist: Zusätzlichen Client anlegen Fehler 3 (IO Error), versuche ich so: Function worm_tse_registerClient(context:pointer;clientid:p ansichar):integer;cdecl; external 'WormAPI.dll'; Clients auslesen Fehler 1 Wrong Input Parameter Dann noch Dinge die mich um die Praxistauglichkeit fürchten lassen: Nach Startendes Rechners aus dem Ruhezustand oft keine Funktion; nicht mal Init geht dann. Abhilfe ist dann Karte rausnehmen und wieder einstecken. Beim Einstecken fast regelmäßig Meldung von Windows das Laufwerk muss repariert werden, was ich Windows auch machen lasse da sonst oft kein Funktion |
AW: Swissbit DLL - Diverse Fragen
Zitat:
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
Delphi-Quellcode:
Bei mir geht das ohne Fehler.
worm_tse_registerClient(context, PAnsiChar('Client4711'));
|
AW: Swissbit DLL - Diverse Fragen
Bei mir auch. Allerdings kenne ich das Problem mit dem Ruhezustand auch, eine komplette Neuinitialisierung funktioniert aber zum Glück meistens.
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
Delphi-Quellcode:
type
TClientId = array [0..30] of AnsiChar; TWormClients = packed record amount: Integer; clientIds: array [0..16] of TClientId; end; PWormClients = ^TWormClients; function worm_tse_listRegisteredClients(context: IntPtr; toSkip: Integer; clients: PWormClients): Integer; cdecl; external 'WormAPI.dll'; ... var res, i: Integer; clients: PWormClients; tmp: AnsiString; begin res := worm_tse_listRegisteredClients(worm_context, 0, clients); if (res <> 0) then raise EWormException.Create(res); for i := 0 to clients.amount - 1 do begin tmp := clients.clientIds[i]; // Mach was mit den ClientID´s end; end; |
AW: Swissbit DLL - Diverse Fragen
Danke, das funktioniert.
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
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:
Hat da jemand eine Erklärung zu? :shock:
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; |
AW: Swissbit DLL - Diverse Fragen
Hat sich erledigt :roll:
Ich sollte natürlich nur den Pointer (response_pointer) und nicht die Klasse Repsonse übergeben. |
AW: Swissbit DLL - Diverse Fragen
Kann die Swissbit TSE eigentlich an eine VM (VMware 15.5) "durchgereicht" werden?
|
AW: Swissbit DLL - Diverse Fragen
Ist nicht die direkte Antwort auf die Frage - Mit HyperV hab ich´s jedenfalls noch nicht hinbekommen.
Die Swissbit TSE erwartet als Mountpoint einen Laufwerksbuchstaben. Das ist Tricky |
AW: Swissbit DLL - Diverse Fragen
Hi,
hier scheinen ja viele Leidensgenossen auf dem Weg nach Canossa zu sein :-) Also die "Objekte", die in der DLL lauern, habe ich mit IntPtr angesprochen Für Bytefelder wie PINs habe ich mir einen hübschen Objekttyp gebacken, der das Member B: TUnchar mit TUnChar = array of Byte enthält Clientid ist bei mir ansistring, wird aber mit pansichar(client) übergeben (beim Neuregistrieren eines Clienten) Das Responseobjekt ist auch ein IntPtr, ebenso die Kollegen Wormcontext und Worminfo Um ein TAR-Archiv vernünftig ansehen zu können braucht man das Programm "AmadeusVerify", falls man an Gastrmist gebunden ist. Im dortigen Forum ist auch ein nachvollziehbares Beispiel zum TAR-Export. Man programmiere gleich den gefilterten Export, das braucht man sowieso irgendwann. Beim Auslesen der Finish-Signatur ist mir was Lustuges passiert: Das Programm funktioniert nicht in der IDE, wenn der Debugger dranhängt. Siehe mein anderer Thread von heute in Delphi-IDE So, ich hoffe wir bleiben in Verbindung und können uns helfen. ism :-D |
AW: Swissbit DLL - Diverse Fragen
Hallo,
nochmal zum Zertifikat: Wo in der Doku habt Ihr worm_getLogMessageCertificate() aufgetrieben ? Gruss ism |
AW: Swissbit DLL - Diverse Fragen
Moin,
in der HTML-Doku unter Modules/Exporting Stored Data Da steht: Zitat:
|
AW: Swissbit DLL - Diverse Fragen
Hi,
das ist ja bekloppt wie'n Schnitzel. In der Abteilung EXPORTE habe ich natürlich nicht gesucht. Na dann... :-D ism |
AW: Swissbit DLL - Diverse Fragen
Mahlzeit,
nochmal zum Problem der Clientenliste von DeddyH. Wie bzw. wann hast Du die clients: PWormClient erzeugt ? ism |
AW: Swissbit DLL - Diverse Fragen
Welches Problem?
Ich habe eine Unit WormTypes. Da steht unter anderem
Code:
drin. In meiner WormStore Klasse gibts folgendes.
type
// Clients TClientId = array [0 .. 30] of AnsiChar; TWormClients = packed record amount: Integer; clientIds: array [0 .. 16] of TClientId; end; PWormClients = ^TWormClients;
Code:
Aufgerufen wird´s z.B so.
function WormStore.tse_listRegisteredClients: TStringList;
var res: Integer; i: Integer; clients: PWormClients; begin New(clients); Result := TStringList.Create; try res := worm_tse_listRegisteredClients(worm_context, 0, clients); if (res <> WORM_ERROR_NOERROR) then raise EWormException.Create(res); for i := 0 to clients.amount - 1 do Result.Add(clients.clientIds[i]); finally Dispose(clients); end; end;
Code:
var clients: TStringlist;
... clients := WormAccessInstanz.tse_listRegisteredClients; try Memo1.Lines.Add('Registered Clients: ' + clients.CommaText); finally clients.Free; end; |
AW: Swissbit DLL - Diverse Fragen
Hallo,
ja, inzwischen hab ichs auch so. ism |
AW: Swissbit DLL - Diverse Fragen
Um ein TAR-Archiv vernünftig ansehen zu können braucht man das Programm "AmadeusVerify", falls man an Gastrmist gebunden ist.
Swissbit hatte Mitte Jan auf einer Veranstaltung bekannt gegeben, das es einen Online TAR Prüfer geben soll, der soll Anfang Feb auf deren Webseite zu finden sein. Ich habe noch nicht geschaut und die 500 Euronen für das Verify Tool ausgegeben ;-) |
AW: Swissbit DLL - Diverse Fragen
Ich habe gerade nen Update bekommen. (TSE-API v5.5.1)
Dazu noch PDF Dokumentationen von Swissbit. Ein Komplett-Export (wird bevorzugt z.B so gemacht)
Code:
Ich glaube ich warte noch 3-4 Monate. Da wird sich noch einiges zeigen.
cat TSE_TAR.001 TSE_TAR.002 TSE_TAR.003 ... > TSE_TAR.tar
|
AW: Swissbit DLL - Diverse Fragen
Bist Du Dir bezüglich der Version sicher? Wir finden da nur eine aktualisierte 5.4. Muss ich meine Brille putzen?
|
AW: Swissbit DLL - Diverse Fragen
Ja. Changelog sieht so aus.
Zitat:
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
|
AW: Swissbit DLL - Diverse Fragen
7zip muss nur auf der aktuellsten Version sein, dann machts auch keine Probleme.
|
AW: Swissbit DLL - Diverse Fragen
Hmm, die 5.5.1 gibt es, aber dafür ist der Documentation Folder quasi leer... Woher hast du das ergänzende PDF?
|
AW: Swissbit DLL - Diverse Fragen
Wie gesagt, ich bin bei einem anderen Swissbit Partner (Partner Tech). Ich habe dort 8 PDF´s dazu bekommen. Datenblätter, ReleaseNotes, Verpackungsprüfanweisung und halt erweiterte Firmware Guides. Alles von Swissbit selbst. Das sollte bei euch doch auch mit ausgeliefert worden sein oder nicht?
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
TAR Archiv anschauen ja; hast Du denn mal die Logs bzw den Inhalt geprüft .... Dazu kann man von Gastro MIS das Tool verwenden. Wie schon mal geschrieben SwissBit will sowas Online Anbieten (kostenfrei) .... Ich will aber das machen, was man machen kann, damit man mit dem Thema durch ist und unsere TSE's endlich ausliefern kann und wieder Dinge Programmieren , die Spass machen, statt so ein "Sch..ss" |
AW: Swissbit DLL - Diverse Fragen
Zitat:
TAR Archiv anschauen ja; hast Du denn mal die Logs bzw den Inhalt geprüft .... Dazu kann man von Gastro MIS das Tool verwenden. Wie schon mal geschrieben SwissBit will sowas Online Anbieten (kostenfrei) .... Ich will aber das machen, was man machen kann, damit man mit dem Thema durch ist und unsere TSE's endlich ausliefern kann und wieder Dinge Programmieren , die Spass machen, statt so ein "Sch..ss" |
AW: Swissbit DLL - Diverse Fragen
Zitat:
|
AW: Swissbit DLL - Diverse Fragen
Hallo Gemeinde,
ich war gestern mit einem befreundeten Gastronom unterwegs und wir haben ein wenig über Bonpflicht etc philosophiert. Dabei kam ich auf ein interessantes Thema, weil der Gute auch Nachtbedienung von 23.00 bis 5.00 morgens macht: Man muss ja in der Swissbit TSE regelmäßig die Zeit setzen(spätestens alle 25 Minuten) und die gesetzte Zeit muss ja monoton zunehmend sein. Wenn aber nun bei der Zeitumstellung von Sommerzeit auf Winterzeit in der Stunde, "die es nicht gibt" die Uhr der TSE gesetzt wird hat man meiner Meinung nach mit den 25 Minuten 2* den Fall dass die Uhr der TSE zurückgestellt werden müsste. Sehe ich das richtig, oder habe ich da einen Knoten im Hirn???? Wenn das aber tatsächlich so ist: wie soll das dann gehen? Gruß Dirk |
AW: Swissbit DLL - Diverse Fragen
Du gibst die Zeit als Unix-Timestamp, Format UTC, an. Dann ist es egal, ob Du Sommer- oder Winterzeit hast und Du kannst mit der Kasse (samt TSE) sogar um den halben Globus reisen.
|
AW: Swissbit DLL - Diverse Fragen
Zitat:
Aber es ist in der Tat eine interessante Frage. Wer weiß, ob da schon jemand dran gedacht hat? Wie wäre es das einmal die Hersteller der TSEs zu fragen? |
AW: Swissbit DLL - Diverse Fragen
Nach meiner bisherigen Erfahrung wird die Uhrzeit im ISO8601-Format angegeben, das ist entweder direkt UTC oder lokale Zeit mit Angabe des Offsets zu UTC.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 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