AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Frage zu Typenlosen Parameter einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Typenlosen Parameter einer Funktion

Ein Thema von schwa226 · begonnen am 19. Mär 2010 · letzter Beitrag vom 20. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Frage zu Typenlosen Parameter einer Funktion

  Alt 19. Mär 2010, 17:15
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:
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;
Ich muss den Report vorher sichern, denn wenn GetFeature False zurückgibt (Device Fehler) wird der Report gelöscht.
D.H. für jeden Versuch muss ich dann den Report neu setzen.

Wie kann ich ein "Backup" von Report machen?

Danke!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 19. Mär 2010, 18:06
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#3

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:06
Hi,

leider geht das nicht immer mit CopyMemory.
Wenn ich z.B. diesen Typ übergebe:
Delphi-Quellcode:
  THidVersion = packed record
    ReportID: Byte;
    Data: Array[0..10] of AnsiChar;
  end;
Geht es fast bei jedem 2. mal!?

Bei diesem Typ geht es gar nicht:
Delphi-Quellcode:
  THidReport = packed record
    ReportID: Byte;
    Data: Boolean;
  end;
??
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:08
wie sieht dein dein Versucht mit CopyMemory aus? "Geht nicht" ist keine sonderlich gute Fehlerbeschreibung
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:17
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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#6

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:20
Geht nicht bedeutet Data bleibt leer!?
GetlastError sagt mir immer 0, also kein Fehler.

Delphi-Quellcode:
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;
Wenn ich diese Schleife mache, dann kann es beim Ersten mal funktionieren oder auch nie...

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.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:23
Lass das @ vor dem Report weg (oder benutz meinen Code. Der funktioniert nämlich ganz sicher!)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:36
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#9

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:38
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.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Frage zu Typenlosen Parameter einer Funktion

  Alt 20. Mär 2010, 16:41
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz