Autor |
Beitrag |
hibbert
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Di 11.09.07 11:16
Hallo,
ich benutze gerade die csp2.dll um gespeicherte Barcodes auf einem an den USB angeschlossenen Gerät auszulesen.
Das Barcod auslesen funktioniert auch schon ganz gut. Das auslesen des Timestamps (also wann der Barcode gescannt wurde) funktioniert auch. Nur gibt es dabei ein kleines Problem:
Wenn ich nun diesen Timestamp weiter verarbeiten möchte kommt immer eine AV.
Damit ihr euch besser in meine Lage versetzen könnte, zeige ich euch mal, was ich bisher habe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| Function csp2GetPacket (stPacketData : array of char ; lgBarcodeNumber : integer; nMaxLength : integer): integer; stdcall; External 'csp2.dll'; Function csp2TimeStamp2Str(var Stamp: char;value: PChar;nMaxLength: integer): longint; stdcall; External 'csp2.dll';
procedure TForm1.Button2Click(Sender: TObject); var count : integer; k,x: Integer; i,AsciiMode,RTC,PacketLength : integer; nRetStatus: longint; Packet : array[0..100] of char; Barcode : string; tmp: pchar; Timestamp:string[21]; nComPort : longInt; begin listbox1.clear; csp2Init(port); count := csp2ReadData; statusbar1.Panels[0].Text:='Anzahl der vorhandenen Barcodes: '+inttostr(count);
for i := 0 to 100 do packet[i] := #0;
if count > 0 then begin for I := 0 to count-1 do begin barcode := ''; for k := 0 to 100 do PacketLength := csp2GetPacket(packet[1],k,100); for k := 3 to PacketLength -4 do barcode := barcode + packet[k]; listbox1.Items.Add('Barcode: '+barcode); for k := PacketLength-3 to PacketLength-2 do begin nRetStatus := csp2TimeStamp2Str(packet[k],tmp,21); timestamp := string(tmp); listbox1.Items.Add(timestamp); end; end; end; |
In dem markierten bereich kommt es zur AV.
Im Debug-Modus kann ich in der zeile nRetStatus:=csp2TimeStamp2Str(packet[k],tmp,21); die tmp Var auslesen und mir wird der richtige Timestamp angezeigt.
Hat wer vllt eine Idee, wie ich nun die tmp in eine String umwandeln kann und diesen anschließend dann ausgeben kann?
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
azrael_7
      
Beiträge: 78
Windows Vista
D2005 Pers. [de]
|
Verfasst: Di 11.09.07 11:39
erm... bin ich blind? wo wird denn die Variable tmp befüllt?
hab nur die deklaration als pchar gefunden und die Übergabe als value an csp2TimeStamp2Str...
_________________ -·- Es gibt Leute die bringen Freude, wohin sie gehen -·-
-·- und es gibt Leute, die bringen Freude, wenn sie gehen -·-
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Di 11.09.07 11:44
azrael_7 hat folgendes geschrieben: | erm... bin ich blind? wo wird denn die Variable tmp befüllt?
hab nur die deklaration als pchar gefunden und die Übergabe als value an csp2TimeStamp2Str... |
Stichwort: Aliasparameter 
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
azrael_7
      
Beiträge: 78
Windows Vista
D2005 Pers. [de]
|
Verfasst: Di 11.09.07 12:19
hmmm.. oki... immerhin net blind  dafür aber keine Ahnung... 
_________________ -·- Es gibt Leute die bringen Freude, wohin sie gehen -·-
-·- und es gibt Leute, die bringen Freude, wenn sie gehen -·-
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Di 11.09.07 13:05
Aliasparameter:
das var in der Deklaration der Funktion csp2TimeStamp2Str kennzeichnet die variablen als Aliasparameter. D.h. du übergibtst an die procedure einen parameter, die Procedure verändert diesen und danach arbeitest du mit dem veränderten wert weiter.
ein kleines beispiel dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure meineFunc(var zahl:integer); var i:integer; begin for i := 1 to 10 do inc(zahl); end;
var count : integer; begin count := 1; meineFunc(count); showmessage(inttostr(count)); |
So dann wieder zurück zu meinem problem 
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Di 11.09.07 14:33
Muss man eventuell den Speicher für Temp erstmal anfordern ? Oder falls nicht, musst Du Temp vllt. erstmal auf nil setzen bevor Du die Variable übergibst...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Di 11.09.07 14:36
Grad nochmal die Deklaration der externen Funktionen angeschaut. Es sieht aus, als müsstest Du den Speicher reservieren, da deine PCHar-Variable NICHT als Var-Param übergeben wird und die Routine deshalb nicht selber Speicher reservieren kann. Im Param danach musst Du ja auch die Länge für den PChar angeben...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Di 11.09.07 14:50
HelgeLange hat folgendes geschrieben: | Grad nochmal die Deklaration der externen Funktionen angeschaut. Es sieht aus, als müsstest Du den Speicher reservieren, da deine PCHar-Variable NICHT als Var-Param übergeben wird und die Routine deshalb nicht selber Speicher reservieren kann. Im Param danach musst Du ja auch die Länge für den PChar angeben... |
Alles klar, ich habe das ganze jetzt mit nem Pointer gemacht und mir den speicher vorreserviert.
nun funktioniert so wie es soll.
danke für den tipp.
hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Di 11.09.07 14:55
dazu sind wir ja da 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
azrael_7
      
Beiträge: 78
Windows Vista
D2005 Pers. [de]
|
Verfasst: Di 11.09.07 14:58
_________________ -·- Es gibt Leute die bringen Freude, wohin sie gehen -·-
-·- und es gibt Leute, die bringen Freude, wenn sie gehen -·-
|
|