Страница 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
Что то я вообще ничего не понимаб :oops:

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

FT_SetBitMode и Set_USB_Device_BitMode не найдено :(