2016-08-09 173 views
0

Ich habe eine Bilanz von einer in C geschrieben DLL gefüllt ist, die diese Struktur hat:De-Referenzierung Satzelemente

Thackrf_device_list = record 
    serial_numbers: PPAnsiChar; 
    usb_board_ids: ^hackrf_usb_board_id; 
    usb_device_index: PInteger; 
    devicecount: Integer; 
    usb_devices: PPointer; 
    usb_devicecount: Integer; 
    end; 

Der Rekord scheint korrekt ausgefüllt zu werden, weil die ‚Device‘ zurück ganzen Zahlen und ‚usb_devicecoun Es ist wie erwartet. Was ich nicht herausfinden kann ist, wie man die anderen Elemente ablöst. Was ich brauche, ist Kochbuch oder ein paar gute Beispiele.
Hilfe

+1

Bitte besuchen Sie diese Seite und lesen Sie sie aufmerksam durch: http://stackoverflow.com/help/on-topic Hinweis 4: * Fragen, die uns auffordern, ein Buch, ein Tool, eine Softwarebibliothek, ein Lernprogramm oder eine andere Offsite-Ressource zu empfehlen oder zu finden sind off-topic für Stack Overflow, da sie dazu neigen, eigensinnige Antworten und Spam zu bekommen. Beschreiben Sie stattdessen das Problem und was bisher getan wurde, um es zu lösen. * Nachdem Sie mehr als 30 Fragen gestellt haben, ist es für uns vernünftig zu erwarten, dass Sie das wissen, ohne Sie daran erinnern zu müssen. –

+0

Tut mir leid, dass ich das Wort "Buch" benutze. Ich muss dich immer wieder erinnern, vielen Dank. Ich brauche immer noch Hilfe bei der Dereferenzierung der Aufzeichnung. Hast du welche? –

+0

Vielleicht könnten Sie ein Lehrbuch oder die Dokumentation konsultieren. Zeiger werden ausführlich dokumentiert. –

Antwort

2

Dereferenzieren von Zeigern ist ziemlich einfach. Es spielt keine Rolle, ob der Zeiger zu einem Datensatz, einer Klasse oder nur zu einer Variablen gehört. Sie dereferenzieren einen Zeiger, indem Sie den Operator ^ direkt hinter der Kennung des Zeigers hinzufügen.

Zum Beispiel:

var 
    LDeviceList: Thackrf_device_list; 
    LSomePAnsiChar: PAnsiChar; 
    LSomeUsbBoardIDs: hackrf_usb_board_id; 
    LSomeInteger: Integer; 
    LSomePointer: Pointer; 
begin 
    // fill LDeviceList by the C-written DLL 

    LSomePAnsiChar := LDeviceList.serial_numbers^; // returns a pointer to the first char of a string containing the serials as 'serial_numbers' seems to be a pointer to a pointer (PAnsiChar) 
    LSomeUsbBoardIDs := LDeviceList.usb_board_ids^; // gives you the record of type 'hackrf_usb_board_ids' 
    LSomeInteger  := LDeviceList.usb_device_index^; // returns the device index as an integer value 
    LSomePointer  := LDeviceList.usb_devices^; // returns a pointer as 'usb_devices' seems to be a pointer to a pointer 
    // ... 
end; 
1

einen Zeigers in Delphi Dereferenzierung ist eine einfache Sache, den Dereferenzierungsoperator verwenden. Wenn ein Zeiger dereferenziert wird, liefert er einen Wert des Typs, auf den der Zeiger verweist. Für einen nicht typisierten Zeiger