Announcement

Collapse
No announcement yet.

Zeiger auf Zeiger auf Record in eingebundenes DLL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeiger auf Zeiger auf Record in eingebundenes DLL

    Hallo,
    ich bin verzweifelt am versuchen, eine DLL, die in C entwickelt wurde,
    einzubinden. Der Hersteller der DLL hat noch keine VCL für das DLL entwickelt und auch kein Beispielprogramm (in Delphi). Der Support kann nur C und kein Delphi. In der Literatur habe ich auch nichts gefunden.
    Es handelt sich um eine L_BARCODEREAD-funktion, die einen Barcode ausliest und diesen in einer Record-Struktur mit anderen Daten zurückgibt. Das es mehrere Barcodes sein können, handelt es sich um ein Array. Und da die DLL-Funktion den Speicher für dieses Array dynamisch selbst reserviert, erwartet die Funktion eine Adresse auf eine Pointer-Variable. Wie greife ich nun auf dieses Record-Array zu ?? Ich übergebe erst mal einen nicht-typisierten Pointer und versuche danach, darauf zuzgreifen. Der Pointer läßt sich aber nicht in einen Array-Pointer verwandeln.

    Die Definition der Funktion lautet:

    L_INT EXT_FUNCTION L_BarCodeRead(...,..., ppBarCodeData)

    pBARCODEDATA L_FAR * ppBarCodeData; /* address of pointer to the BARCODE structure */

    Die Definition der Barcodedata-Struktur lautet:

    typedef struct tagBarCodeData
    {
    L_INT nGroup;
    L_UINT32 ulType;
    L_INT nUnits;
    RECT rcBarLocation;
    L_INT nSizeofBarCodeData;
    L_CHAR L_FAR pszBarCodeData;
    L_INT nIndexDuplicate;
    L_INT nTotalCount;
    L_INT nDupCount
    } BARCODEDATA, L_FAR * pBARCODEDATA;

    Folgendermaßen versuche ich darauf zuzugreifen:
    Um das Ergebnis zu prüfen, frage ich den Returncode und die
    ntotalcount-Variable = Anzahl gefundener Barcodes, ab.
    Die ntotalcount-Variable liefert mir meist einen etwa 10stelligen Wert zurück, was mir sagt, daß auf einen undefinierten Speicherblock zugegriffen wird.

    procedure lese_barcode();
    var pdata: Pointer; // Pointer für BarcodeData

    begin
    /* Es sind hier alle Argumente angegeben. Problem könnte evtl auch
    den anderen Argumenten liegen. Aber diese sind einfache Strukturen und deren Adressen */
    ok := l_barcoderead(bitmap1,
    @NULL, // Rechteck
    BARCODE_1D_READ_ANYTYPE,// Suche alle EAN-Code
    0, // Rectangle in Millimeter
    0, //
    0, // Anzahl Barcodes
    @bc1d, // Struktur Barcode
    @bcpdf, // Struktur PDF
    @pData);

    ShowMessage('read-ok= '+IntToStr(ok));
    ShowMessage('Anzahl Barcodes: '+ IntToStr(Barcodedata(pdata^).nTotalCount) );
    end;

    Würde mich freuen, wenn mir jemand helfen könnte.
Working...
X