Delphi & FT232RL

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Delphi & FT232RL

Сообщение DIMA040891 »

Добрый день!
Накидал в delphi программку для управления пинами FT232RL, но при попытке компиляуии выдает: [Error] Unit1.pas(63): Undeclared identifier: 'FT_SetBitMode' :(

Как мне это исправить?? заранее спасибо!!
Вложения
FT232R.rar
(192 КБ) 209 скачиваний
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

Все очень просто. Функция FT_SetBitMode описана в модуле D2XX как внутренняя. Она не доступна из внешних модулей. Как вариант можно её описание перенести из раздела implementation в раздел interface. Вариант может быть порочным. Долго разбираться со структурой модуля. Думается, что не зря его не вынесли в раздел интерфейса и для установки бит нужно использовать другой способ. Читать нужно про модуль D2XX.
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Вы можете сказать как мне тогда установить бит порта в единицу, наипростейшим способом, просто с delphi я начал работать буквально две нелели назад и многое ещё не ясно... :(
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Delphi & FT232RL

Сообщение 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".
Изображение only pure true norwegian blackx Изображение
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Я писал так

uses D2XX
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Delphi & FT232RL

Сообщение Jack_A »

Давно это было. В одном из работающих! проектов пис`ал так :

implementation

uses CfgUnit,D2XXUnit;

Подробности не помню. На момент создания не шибко шарил в Дельфи, но с помощью фирмового
описания, здравого смысла и такой-то матери получился работающий проект.
Описание работы с чипами от FTD, ес-сно, с ftdichip.com. Взял оттуда пример, скомпилил 1:1 - живет. И дальше начал копать в нужную мне сторону.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

blackx писал(а):Может нужно что-то типа "#include" в Си?

В модулях Delphi есть раздел uses. Вот в нем все модули, которые нужно подключить и пишутся. Как сделано всеми, кто отвечал на вопрос Димы.
Весь прикол в том, что uses можно писать как в разделе связей (interface), так и в разделе реализации(implementation). Для модуля без разницы. Разница будет в том, что все модули, переменные, классы, процедуры и т.п. будут доступны из других модулей, если они описаны в разделе interface. А все прописанные в разделе implementation - только внутри модуля, в котором описаны. Что и получилось с модулем D2XX. Кстати, сам всегда прописываю все модули именно в разделе interface. А если компилятор сам вставит их в раздел implementation, переношу выше. Поэтому и предложил перенести эту функцию в раздел выше и не морочиться. Скорее всего все будет нормально.
blackx писал(а): В файле ftd2xx.h же она объявлена?

Расширение подключаемых модулей либо .pas, либо .dcu. Файлы с расширением .h подключаются, если используется имеющийся в Delphi встроенный компилятор Си (Builder). Ни разу, за 16 лет программирования на Delphi, использовать его не понадобилось.
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Re: Delphi & FT232RL

Сообщение polyname »

насколько помню в Delphi нужно было объявлять внешние С-функции как stdcall и external (по кр.мере в D5..7).
http://www.helloworld.ru/texts/comp/lan ... /index.htm
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

polyname писал(а):нужно было объявлять внешние С-функции как stdcall и external

Можно. И не обязательно написанных на Си. Но скомпилированных отдельно. Но геморойно это. Начинаются проблемы со стеком. Порядок передачи данных у Си и паскаля разный. Постоянно помнить об этом и не забывать чистить стек.
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Уважаемый vem566 :) я так понимаю что теперь мне необхадимо сделать следующее:

implementation

uses D2XXUnit;

так?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Delphi & FT232RL

Сообщение Мурик »

polyname писал(а):насколько помню в Delphi нужно было объявлять внешние С-функции как stdcall
Наверное имели в виду cdecl, не?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Delphi & FT232RL

Сообщение ploop »

cdecl, угу. stdcall, если память не изменяет, для winapi-вызовов.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

Нет, не так.
Во-первых, модуль уже так и прописан, во-вторых проблема в вызове функции из этого модуля.
Нужно в самом модуле D2XX, описание этой функции в разделе реализации

implementation
...
function FT_SetBitMode(........);

перенести в раздел

interface

function FT_SetBitMode(........);

Именно перенести, а не скопировать. После этого, для полной уверенности, переименовать файл D2XXUnit.dcu во что-нибудь, типа D2XXUnit.dc_, или во что угодно. После компиляции файл dcu будет создан снова, но уже измененный.
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

Вообще не понимаю о чём спор. Если о том, что функция не вынесена в интерфейсы, то юзайте Set_USB_Device_BitMode
она вынесена в интерфейс и из неё вызывается FT_SetBitMode(FT_Handle,Mask,Enable);
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Delphi & FT232RL

Сообщение ploop »

Вообще, можно было исходник куда-нибудь на pastebin.com положить, чтобы люди не напрягаясь код посмотрели...
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

ploop, там не только исходник, но еще и exe файл, который, по сути, не очень то и нужен. потому как dll в архиве все-равно нет ))
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

cahek80 писал(а):Если о том, что функция не вынесена в интерфейсы, то юзайте Set_USB_Device_BitMode

И то верно. Лениво было весь исходник ковырять, а с 232-м не работал ни разу.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

cahek80 писал(а):потому как dll в архиве все-равно нет

Она и не подразумевалась ни разу. D2XX при компиляции собиралась в ехе.
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение 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';
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Что то я вообще ничего не понимаб :oops:

В модуле не таких функций:

FT_SetBitMode и Set_USB_Device_BitMode не найдено :(
Ответить

Вернуться в «Интеграция с ПК»