Страница 1 из 3
Delphi & FT232RL
Добавлено: Чт фев 14, 2013 23:37:26
DIMA040891
Добрый день!
Накидал в delphi программку для управления пинами FT232RL, но при попытке компиляуии выдает: [Error] Unit1.pas(63): Undeclared identifier: 'FT_SetBitMode'
Как мне это исправить?? заранее спасибо!!
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 06:09:28
vem566
Все очень просто. Функция FT_SetBitMode описана в модуле D2XX как внутренняя. Она не доступна из внешних модулей. Как вариант можно её описание перенести из раздела implementation в раздел interface. Вариант может быть порочным. Долго разбираться со структурой модуля. Думается, что не зря его не вынесли в раздел интерфейса и для установки бит нужно использовать другой способ. Читать нужно про модуль D2XX.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 09:40:17
DIMA040891
Вы можете сказать как мне тогда установить бит порта в единицу, наипростейшим способом, просто с delphi я начал работать буквально две нелели назад и многое ещё не ясно...

Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 10:09:40
blackx
vem566, я не понял, а почему как внутренняя? В файле ftd2xx.h же она объявлена?
Код: Выделить всё
FTD2XX_API
FT_STATUS WINAPI FT_SetBitMode(
FT_HANDLE ftHandle,
UCHAR ucMask,
UCHAR ucEnable
);
DIMA040891, я в делфи не разбираюсь, и может вопрос неправильный. А как вы даете понять компилятору, что используете модуль драйвера D2XX? Может нужно что-то типа "#include" в Си? Например сюда добавить
Код: Выделить всё
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
UPD. Почитал
вот тут как в делфи нужно сишный код импортить, похоже вам нужно импортить интерфейсный модуль. У вас он называется D2XXUnit, судя по всему. Добавьте его в список "uses".
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 10:37:37
DIMA040891
Я писал так
uses D2XX
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 11:34:35
Jack_A
Давно это было. В одном из работающих! проектов пис`ал так :
implementation
uses CfgUnit,D2XXUnit;
Подробности не помню. На момент создания не шибко шарил в Дельфи, но с помощью фирмового
описания, здравого смысла и такой-то матери получился работающий проект.
Описание работы с чипами от FTD, ес-сно, с ftdichip.com. Взял оттуда пример, скомпилил 1:1 - живет. И дальше начал копать в нужную мне сторону.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 13:00:28
vem566
blackx писал(а):Может нужно что-то типа "#include" в Си?
В модулях Delphi есть раздел uses. Вот в нем все модули, которые нужно подключить и пишутся. Как сделано всеми, кто отвечал на вопрос Димы.
Весь прикол в том, что uses можно писать как в разделе связей (interface), так и в разделе реализации(implementation). Для модуля без разницы. Разница будет в том, что все модули, переменные, классы, процедуры и т.п. будут доступны из других модулей, если они описаны в разделе interface. А все прописанные в разделе implementation - только внутри модуля, в котором описаны. Что и получилось с модулем D2XX. Кстати, сам всегда прописываю все модули именно в разделе interface. А если компилятор сам вставит их в раздел implementation, переношу выше. Поэтому и предложил перенести эту функцию в раздел выше и не морочиться. Скорее всего все будет нормально.
blackx писал(а): В файле ftd2xx.h же она объявлена?
Расширение подключаемых модулей либо .pas, либо .dcu. Файлы с расширением .h подключаются, если используется имеющийся в Delphi встроенный компилятор Си (Builder). Ни разу, за 16 лет программирования на Delphi, использовать его не понадобилось.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 13:38:32
polyname
насколько помню в Delphi нужно было объявлять внешние С-функции как stdcall и external (по кр.мере в D5..7).
http://www.helloworld.ru/texts/comp/lan ... /index.htm
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 13:47:25
vem566
polyname писал(а):нужно было объявлять внешние С-функции как stdcall и external
Можно. И не обязательно написанных на Си. Но скомпилированных отдельно. Но геморойно это. Начинаются проблемы со стеком. Порядок передачи данных у Си и паскаля разный. Постоянно помнить об этом и не забывать чистить стек.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:28:51
DIMA040891
Уважаемый vem566

я так понимаю что теперь мне необхадимо сделать следующее:
implementation
uses D2XXUnit;
так?
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:34:04
Мурик
polyname писал(а):насколько помню в Delphi нужно было объявлять внешние С-функции как stdcall
Наверное имели в виду cdecl, не?
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:38:14
ploop
cdecl, угу. stdcall, если память не изменяет, для winapi-вызовов.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:44:24
vem566
Нет, не так.
Во-первых, модуль уже так и прописан, во-вторых проблема в вызове функции из этого модуля.
Нужно в самом модуле D2XX, описание этой функции в разделе реализации
implementation
...
function FT_SetBitMode(........);
перенести в раздел
interface
function FT_SetBitMode(........);
Именно перенести, а не скопировать. После этого, для полной уверенности, переименовать файл D2XXUnit.dcu во что-нибудь, типа D2XXUnit.dc_, или во что угодно. После компиляции файл dcu будет создан снова, но уже измененный.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:47:58
cahek80
Вообще не понимаю о чём спор. Если о том, что функция не вынесена в интерфейсы, то юзайте Set_USB_Device_BitMode
она вынесена в интерфейс и из неё вызывается FT_SetBitMode(FT_Handle,Mask,Enable);
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:50:48
ploop
Вообще, можно было исходник куда-нибудь на pastebin.com положить, чтобы люди не напрягаясь код посмотрели...
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:55:09
cahek80
ploop, там не только исходник, но еще и exe файл, который, по сути, не очень то и нужен. потому как dll в архиве все-равно нет ))
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 15:58:45
vem566
cahek80 писал(а):Если о том, что функция не вынесена в интерфейсы, то юзайте Set_USB_Device_BitMode
И то верно. Лениво было весь исходник ковырять, а с 232-м не работал ни разу.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 16:01:32
vem566
cahek80 писал(а):потому как dll в архиве все-равно нет
Она и не подразумевалась ни разу. D2XX при компиляции собиралась в ехе.
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 16:51:30
cahek80
vem566 писал(а): Она и не подразумевалась ни разу. D2XX при компиляции собиралась в ехе.
не спорю, но меня тогда очень смущают строки
FT_DLL_Name = 'FTD2XX.DLL';
и
function FT_SetBitMode(ftHandle:Dword; Mask,Enable:Byte):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBitMode';
Re: Delphi & FT232RL
Добавлено: Пт фев 15, 2013 18:28:24
DIMA040891
Что то я вообще ничего не понимаб
В модуле не таких функций:
FT_SetBitMode и Set_USB_Device_BitMode не найдено
