|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi + LibUSB, толи лыжи не едут толи я.....
Доброго вечера всем.
Я с делфи знаком совсем немного поэтому пишу в раздел для начинающих. Для своего проекта я написал небольшую программу на GCC и libusb-win32 для работы со своим девайсом через USB. Теперь понадобился GUI и решил перевести проект на Delphi так как раньше, лет 12 назад, я немного на нём писал. Итак, я сдела небольшой набросок Код:
unit MainUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, libusb; type TMainForm = class(TForm) Button1: TButton; Memo: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} function USBDeviceOpen(var devhandle:pusb_dev_handle;VID, PID: word): bool; var bus: pusb_bus; dev: pusb_device; res: byte; begin usb_init; usb_find_busses; usb_find_devices; bus := usb_get_busses; Result := false; while Assigned(bus) do begin dev := bus^.devices; while Assigned(dev) do begin MainForm.Memo.Lines.Add(Format('%s %s %0.4x %0.4x',[bus.dirname,dev.filename,dev.descriptor.idVendor,dev.descriptor.idProduct])); if (dev.descriptor.idVendor = VID) and (dev.descriptor.idProduct = PID) then begin devhandle := usb_open(dev); Result := true; end; dev := dev^.next end; bus := bus^.next; end; end; procedure TMainForm.Button1Click(Sender: TObject); var name: String; res: byte; Buffer: array [0..63] of byte; udev: pusb_dev_handle; begin if USBDeviceOpen(udev,$04D8, $AB98) = true then begin res := usb_set_configuration(udev, 1); if res = 0 then begin res := usb_claim_interface(udev, 0); if res = 0 then begin MainForm.Memo.Lines.Add('Connection OK'); res := usb_bulk_read(udev, $81, Buffer, 64, 100); MainForm.Memo.Lines.Add(Format('Buffer[0]=%d, Result: %d',[Buffer[0],res])); usb_release_interface(udev, 0); usb_close(udev); end; end; end; end; end. Вот только когда я закоментировал строку вывода в "Memo" (в начале строки добавил // ) в функции USBDeviceOpen при нажатии на кнопку "Button1" программа виснет с сообщением "Debugger Exception Notification. Project xxx raised exception..." и т.д. Раскоментировал строку, опять работает. Совершенно непонятно что же я нетак делаю. Каким образом вывод строки в Memo влияет на программу. Помогите новичку! С уважение Дмитрий |
#2
|
||||
|
||||
Ну поскольку сама запись в мемо не дожна никак влиять на программу предположу, что обращение к свойствам (bus.dirname,dev.filename,dev.descriptor.idVendor, dev.descriptor.idProduct) кроме возврата значений, что-то еще делает внутри своих классов.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |