![]() |
Frage zu Typenlosen Parameter einer Funktion
Hi,
ich arbeite im Moment mit JVCL-TJvHidDevice. Da gibt es ja die Funktionen der HID.dll: function TJvHidDevice.GetFeature(var Report; const Size: Integer): Boolean; function TJvHidDevice.SetFeature(var Report; const Size: Integer): Boolean; Der "Report" ist ja nun Typenlos und ich jede beliebige Struktur übergeben. Nun habe ich mehrere verschieden GetFeature & SetFeature Requests, alle mit einem unterschiedlichen Type definition. Ich möchte aber eine Unterfunktion machen:
Delphi-Quellcode:
Ich muss den Report vorher sichern, denn wenn GetFeature False zurückgibt (Device Fehler) wird der Report gelöscht.
procedure DoGetData(var Report; const Size: Integer; Retry : Boolean);
var Data : Array of Byte; begin //backup Report ID: SetLength(Data, Size); CopyMemory(@Data, @Report, Size); //hier werden keine Daten kopiert, Report Type ist unbekannt! while not Device.GetFeature(Report, Size) do begin end; end; D.H. für jeden Versuch muss ich dann den Report neu setzen. Wie kann ich ein "Backup" von Report machen? Danke! |
Re: Frage zu Typenlosen Parameter einer Funktion
in dem du dir die Adresse von Report nimmst und zum Beispiel mit CopyMemory die daten in eine andere Variable kopierst. oder du verwendest move. Und die neue Variable kann zum Beispiel ein Array of Byte sein welches du so groß machst wie Size es verlangt.
|
Re: Frage zu Typenlosen Parameter einer Funktion
Hi,
leider geht das nicht immer mit CopyMemory. Wenn ich z.B. diesen Typ übergebe:
Delphi-Quellcode:
Geht es fast bei jedem 2. mal!?
THidVersion = packed record
ReportID: Byte; Data: Array[0..10] of AnsiChar; end; Bei diesem Typ geht es gar nicht:
Delphi-Quellcode:
??
THidReport = packed record
ReportID: Byte; Data: Boolean; end; |
Re: Frage zu Typenlosen Parameter einer Funktion
wie sieht dein dein Versucht mit CopyMemory aus? "Geht nicht" ist keine sonderlich gute Fehlerbeschreibung :glaskugel:
|
Re: Frage zu Typenlosen Parameter einer Funktion
Versuche es mal so:
Delphi-Quellcode:
procedure DoGetData(var Report; const Size: Integer; Retry : Boolean);
var Data : Array of Byte; begin SetLength(Data, Size); Move(Report, Data[0], Size) // Weiterer Code end; |
Re: Frage zu Typenlosen Parameter einer Funktion
Geht nicht bedeutet Data bleibt leer!?
GetlastError sagt mir immer 0, also kein Fehler.
Delphi-Quellcode:
Wenn ich diese Schleife mache, dann kann es beim Ersten mal funktionieren oder auch nie...
var
Data : Packed Array of Byte; i : integer; begin //backup Report SetLength(Data, Size); while Data[0] = 0 do begin CopyMemory(@Data[0], @Report, Size); i := GetLastError; end; Schätze das es etwas mit dem "@Report" zu tun hat. Ein "@Report[0]" kann ich ja nicht machen, da Report ja Typenlos ist. Das mit Move geht auch so wie mit CopyMemory. Also nicht immer... Werde es einmal probieren nicht "var Report" zu übergeben, sondern einen Pointer auf Report. |
Re: Frage zu Typenlosen Parameter einer Funktion
Lass das @ vor dem Report weg (oder benutz meinen Code. Der funktioniert nämlich ganz sicher!)
|
Re: Frage zu Typenlosen Parameter einer Funktion
Der Code macht doch gar keinen Sinn. Wozu die Schleife? Die macht nichts anderes als die ganze Zeit immer wieder Report zu kopieren aber welchen Sinn macht das wenn die Daten innerhalb der Schleife nirgends hinn übergeben werden?
|
Re: Frage zu Typenlosen Parameter einer Funktion
Das Problem ist wenn GetFeature fehlschägt, dann wird mein "var Report" überschrieben.
Deswegen muss ich für jeden Versuch den Report neu beschreiben. Jedoch habe ich bemerkt, dass wenn auch True von GetFeature zurückkommt es vorkommen kann, dass keine Daten in Report drinnen sind. |
Re: Frage zu Typenlosen Parameter einer Funktion
Dann zeige uns doch auch mal den Code wo du GetFeature aufrufst im Zusammenhang mit der Sicherung. Es macht keinen Sinn das du uns eine Schleife zeigst wo all das gar nicht vor kommt. Wir können dir schließlich nicht bei deinem fehlerhaften Quelltext helfen wenn du uns ganz anderen zeigst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 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