Delphi & FT232RL

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

Re: Delphi & FT232RL

Сообщение DIMA040891 »

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

Re: Delphi & FT232RL

Сообщение vem566 »

DIMA040891 писал(а):Что то я вообще ничего не понимаб

Как обычно, верхоглядство до добра не доводит (это я про себя). :cry: Пришлось тщательно разбираться. :write:
Теперь хоть понятие есть, как это реализовано.
Файл ftd2xx.h - это исходник для библиотеки FTD2XX.DLL на Си.
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

И получается изпользовать её тоже не получится :(
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Delphi & FT232RL

Сообщение vem566 »

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

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Почему то DEV-C++ не компилирует... вообще ничего не происходит :( :(
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Delphi & FT232RL

Сообщение blackx »

Так получается после добавления в "uses" модуля D2XXUnit (файл D2XXUnit.pas) компилятор все равно не находит функцию? А она ведь есть, строка 367:

Код: Выделить всё

function FT_SetBitMode(ftHandle:Dword; Mask,Enable:Byte):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBitMode';


Может лучше разобраться, почему такое происходит?

PS. Как вариант у вас появился отличный повод начать изучать Си.
Изображение only pure true norwegian blackx Изображение
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Точно она же там есть!!!! Почемуто Ctrl+F вбиваю в поиск FT_SetBitMode и не находит :((

Может из-зи того что у меня FT232R????
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Re: Delphi & FT232RL

Сообщение polyname »

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

Re: Delphi & FT232RL

Сообщение cahek80 »

vem566, по-моему там тока интерфейсы.. или я недоглядел )))
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

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

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

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

interface

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

Именно перенести, а не скопировать. После этого, для полной уверенности, переименовать файл D2XXUnit.dcu во что-нибудь, типа D2XXUnit.dc_, или во что угодно. После компиляции файл dcu будет создан снова, но уже измененный.



Если делать так то пишет: [Error] D2XXUnit.pas(5): Undeclared identifier: 'Dword'
[Error] D2XXUnit.pas(5): Undeclared identifier: 'FT_Result'
ну и много чего ещё :(
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

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

Re: Delphi & FT232RL

Сообщение vem566 »

cahek80 писал(а):по-моему там тока интерфейсы.. или я недоглядел

Не часто, но в практике натыкался на такие конструкции, как здесь. Может авторы преследовали какие-то цели при сотворении подобных вывертов, но мне они не известны. Одно могу отметить - мозги, у не нашего народа, работают по другому. Наворотить все это для того, чтобы вызвать функцию WinApi. Похоже на некую универсальную конструкцию.
Но тем не менее
cahek80 писал(а):у меня всё компилится

Надо думать, что и работает. Почему нет?

Про функцию FT_SetBitMode
blackx писал(а):А она ведь есть, строка 367:
Код:
function FT_SetBitMode(ftHandle:Dword; Mask,Enable:Byte):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBitMode';


Нет её в модуле. Есть только ссылка. Подчеркнутое означает, что функция находится во внешнем модуле с именем FT_DLL_Name. Имя её во внешнем модуле 'FT_SetBitMode'.
По поводу способа вызова внешних функций.
polyname писал(а):так для этого и используется cdecl и stdcall


Вообще-то способов вызова функций шесть. Хотя thiscall и stdcall по сути одинаковы. Может те, кто пишет на Си их как-то различают, не знаю.
По умолчанию Delphi использует способ вызова fastcall. Это передача параметров, если их не много, через регистры, а не через стек, что намного быстрее. Вызовы cdecl и stdcall - принятые соглашения вызовов между языками. Внутри своего проекта можно изголяться как угодно. Просто никому не охота. Да и не нужно.
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

vem566 писал(а):Надо думать, что и работает. Почему нет?


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

Re: Delphi & FT232RL

Сообщение vem566 »

Так её нужно скомпилить из файла ftd2xx.h. Нужно посмотреть директивы компилятора Си, чтобы собрал библиотеку.
Сам с Си пробовал работать лет 20 назад, поэтому по нему что-то конкретное сказать не смогу.
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

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

Re: Delphi & FT232RL

Сообщение vem566 »

Сам же говорил, что в нем(файле) только интерфейс. Для связи с драйверами USB. Похоже через промежуточную библиотеку FTD2XX_API.dll. Я и говорю, что подобные конструкции плохо усваиваются. Да и по большому счету на хрен не нужны. Есть реальная задача, которую можно решить не прибегая к подобному извращению. Никогда не был сторонником подключения в проект подобных маловменяемых вещей. Потраченное время на разбирательство себя не оправдывает. И Си у меня тоже нет за ненадобностью. Все проблемы решались либо с помощью Delphi + WinApi, либо, очень редко, ассемблеровской вставкой в Delphi.
А разбираться с ftd2xx ... Зачем?
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

vem566, ну это к топикстартеру вопрос )) я смотрел просто ради интереса.
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Re: Delphi & FT232RL

Сообщение polyname »

Так её нужно скомпилить из файла ftd2xx.h.
зачем ? DLL там готовая лежит, нужно только скопировать в windows/system32. А на основе ftd2xx.h нужно написать свой интерфейсный pascal-файл.
Аватара пользователя
DIMA040891
Открыл глаза
Сообщения: 68
Зарегистрирован: Чт дек 03, 2009 19:55:03

Re: Delphi & FT232RL

Сообщение DIMA040891 »

Дыг в итоге :) что мне делать то???????????? :)
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

Re: Delphi & FT232RL

Сообщение cahek80 »

по-моему выше вариант решения писали уже

Код: Выделить всё

procedure TForm1.Button2Click(Sender: TObject);
begin
Set_USB_Device_BitMode( CBUS3_out+CBUS2_out+CBUS1_out+CBUS0_out+CBUS3, $20);
end;
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Ответить

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