![]() |
Array Problem
Hallo,
Das folgende type ist ein Auszug aus dem Twain.pas (DelphiTwain-Component bei sourceforge.net)
Delphi-Quellcode:
mein Problem:TW_EXTIMAGEINFO = packed record NumInfos: TW_UINT32; Info: array[0..0] of TW_INFO; end; ich brauche aber mehr als nur ein Info (siehe unten procedure Auszug). Im TW_EXTIMGAINFO-Struct ist das Info als ein Array von der Länge 1 definiert! Wie kann ich das lösen?
Delphi-Quellcode:
grußprocedure Tfrm_main.DelphiTwain1SourceSetupFileXfer(Sender: TObject; const Index: Integer); var vTWExtImageInfo: TW_EXTIMAGEINFO; sBarcodeText: String; begin with vTWExtImageInfo do begin NumInfos := 4; Info[0].InfoID := TWEI_BARCODETYPE; Info[0].ItemType := TWTY_UINT32; Info[0].NumItems := 0; Info[0].CondCode := 0; Info[0].Item := 0; Info[1].InfoID := TWEI_BARCODETYPE; Info[1].ItemType := TWTY_UINT32; Info[1].NumItems := 0; Info[1].CondCode := 0; Info[1].Item := 0; Info[2].InfoID := TWEI_BARCODETEXTLENGTH; Info[2].ItemType := TWTY_UINT32; Info[2].NumItems := 0; Info[2].CondCode := 0; Info[2].Item := 0; Info[3].InfoID := TWEI_BARCODETEXT; Info[3].ItemType := 0; Info[3].NumItems := 0; Info[3].CondCode := 0; Info[3].ItemType := 0; ..... bergamo34 |
Re: Array Problem
*selbstzitier*
Zitat:
|
Re: Array Problem
Das ist die Uebertragung eines Sprachfeatures von C.
Das Record ist nur ein Header einer laengeren Liste. In C kann man nun innerhalb des Records ein Array-Element deklarieren mit Arraylaenge 0. Damit traegt das Element nicht zur Laenge (sizeof) des Records bei. Das Element dient nur dazu das man seine Adresse bilden kann. Damit bekommt man die Adresse direkt hinter dem Record. In Delphi kann man das nicht genau nachbilden, da ein leeres Array nicht erlaubt ist und daher in die Recordgroesse eingeht. Da diese Headerstruktur aber sowieso nur ein Teil eines laengeren Puffers ist, ist das nicht so tragisch. |
Re: Array Problem
danke für die Antworten, aber mir ist immer noch nicht ganz klar!
Zitat:
bei dem obigen Beispiel kommt die Fehlermeldung "Konstantenausdruck verletzt untere Grenzen". |
Re: Array Problem
Du bekommst doch bestimmt auch gesagt, in welcher Zeile der Fehler auftritt - oder?
Grüße vom marabu |
Re: Array Problem
ja, Fehlerzeile:
Info[1].InfoID := TWEI_BARCODETYPE; |
Re: Array Problem
Die Meldung in Verbindung mit dieser Code-Zeile macht mich zwar stutzig, aber was mich viel mehr stutzen lässt ist die Tatsache, dass du eine nur zur Redefinition gedachte Speicherstruktur direkt befüllen möchtest. Du musst denn Speicher dynamisch zuordnen, wenn du mehr als einen Info-Record befüllen willst.
Grüße vom marabu |
Re: Array Problem
ja aber wie???
bin leider noch nicht weiter gekommen. |
Re: Array Problem
Hallo.
Du musst den Speicher für deine vier Image Descriptoren dynamisch anfordern:
Delphi-Quellcode:
Grüße vom marabu
var
pExtImgInfo: PTW_ExtImageInfo; pInfo: PTW_Info; iCount, iSize: cardinal; sBarcodeText: string; begin iCount := 4; // Anzahl der Infos iSize := SizeOf(TW_UINT32) + iCount * SizeOf(TW_INFO); GetMem(pExtImgInfo, iSize); pExtImgInfo^.NumInfos := iCount; pInfo := @pExtImgInfo^.Info; // auf erstes item zeigen with pInfo^ do begin InfoID := TWEI_BARCODETYPE; ItemType := TWTY_UINT32; NumItems := 0; CondCode := 0; Item := 0; end; Inc(pInfo); // auf nächstes Item zeigen with pInfo^ do begin InfoID := TWEI_BARCODETYPE; ItemType := TWTY_UINT32; NumItems := 0; CondCode := 0; Item := 0; end; // ... FreeMem(pExtImgInfo, iSize); // Speicher wieder freigeben end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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