§ 26. WoodmanUSB. Программирование в Delphi
|
Дмитрий Иванов, 09 Декабря 2013
|
|
Файлы к статье скачать
|
Имя: KA026.zip (ZIP архив) |
Размер: 232 КБ |
|
Знаю, что значительная часть программистов работает на языке Delphi, поэтому считаю необходимым рассмотреть программирование WoodmanUSB и на этом языке. Сделаем приложение, как в прошлой статье, но на языке Delphi в среде разработки Borland Delphi 7.0.
Запускаем среду разработки и сразу же попадаем к заготовке пустой формы для нашего приложения. Лучше сразу же сохранить проект командой File -> Save Project as...

Предлагаю оставить внешний вид программы без изменений, как он был в прошлой статье. Тогда, добавляем на форму необходимые элементы управления. В результет должно получиться нечто вроде такого:

Теперь займемся кодом программы. В первую очерь, необходимо каким либо образом подключить библиотеку WUSBdrv.dll к проетку. Будем использовать динамическое включение. Для этого поместите библиотеку в папку к проекту. Далее в коде опишем объявления функций, которые будут экспортироваться из библиотеки:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
function WUSB_Open():Longint; cdecl; external 'WUSBdrv.dll';
function WUSB_SetupPortA(iomsk: Byte):Longint; cdecl; external 'WUSBdrv.dll';
function WUSB_WritePortA(value: Byte):Longint; cdecl; external 'WUSBdrv.dll';
function WUSB_ReadPortA(value: Pointer):Longint; cdecl; external 'WUSBdrv.dll';
type
TForm1 = class(TForm)
.........
Итак, функции библиотеки описали. Теперь можно заняться и обработчиками нажатий на кнопки формы. Начнем, разумеется, с кнопки Open WoodmanUSB. Дваждя щелкаем на нее. Нас переносит к пустой заготовке обработчика. Дополняем код до следующего вида:
procedure TForm1.Button1Click(Sender: TObject);
var
status: Longint;
begin
status:=WUSB_Open();
if status = 1 then
begin
MessageDlg('Open Ok', mtInformation, [mbOK], 0);
end
else
begin
MessageDlg('Open Error...', mtError, [mbOK], 0);
end
end;
Я думаю пояснять данный код не следует, за исключением значения с которым анализируется переменная status. В коде на C++ мы использовали константы WUSB_OK и WUSB_ERROR определенные через оператор препроцессора #define. В Delphi коде необходимо переопределить эти константы. Для такой простой программы я этого не делал, а просто указал числовое значение данной константы.
Опишем обработчик кнопки установки маски ввода-вывода. По уже отлаженной схеме добавляем следующий код:
procedure TForm1.Button2Click(Sender: TObject);
var
status: Longint;
begin
status := WUSB_SetupPortA(StrToInt(Edit1.Text));
if status = 0 then
begin
MessageDlg('Setup Error', mtInformation, [mbOK], 0);
end
else
begin
MessageDlg('Setup OK', mtInformation, [mbOK], 0);
end
end;
Здесь я позволил себе не проводить дополнительных проверок на адекватность вводимых данных. В функцию WUSB_SetupPortA() необходимо передать число. Получаем его из соответствующего окошка ввода-вывода, используя функцию StrToInt(), преобразующую текст в число. Остальное должно быть вполне понятным.
Обработчик кнопки записи данных:
procedure TForm1.Button3Click(Sender: TObject);
var
status: Longint;
begin
status := WUSB_WritePortA(StrToInt(Edit2.Text));
if status = 0 then
begin
MessageDlg('Write Error', mtInformation, [mbOK], 0);
end
end;
Ну и под конец обработчик кнопки чтения данных:
procedure TForm1.Button4Click(Sender: TObject);
var
status: Longint;
data: Byte;
begin
status := WUSB_ReadPortA(@data);
if status = 0 then
begin
MessageDlg('Read Error', mtInformation, [mbOK], 0);
end
else
begin
Edit3.Text:= IntToStr(data);
end
end;
На этом все. Можно компилировать и запускать. Должно все работать. Не забудьте только модуль к компьютеру подключить.
© Дмитрий Иванов
09 Декабря 2013 года
http://www.kernelchip.ru