Страница 2 из 3

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 18:30:54
DIMA040891
в модуле который D2XXUnit

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 19:34:46
vem566
DIMA040891 писал(а):Что то я вообще ничего не понимаб
Как обычно, верхоглядство до добра не доводит (это я про себя). :cry: Пришлось тщательно разбираться. :write:
Теперь хоть понятие есть, как это реализовано.
Файл ftd2xx.h - это исходник для библиотеки FTD2XX.DLL на Си.

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 19:38:42
DIMA040891
И получается изпользовать её тоже не получится :(

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 19:42:04
vem566
Почему? Запустить CBuilder (если при установки Delphi его не выкинул), и скомпилируй dll. Или любой компилятор Си.

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 20:02:51
DIMA040891
Почему то DEV-C++ не компилирует... вообще ничего не происходит :( :(

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 20:10:28
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. Как вариант у вас появился отличный повод начать изучать Си.

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 20:19:15
DIMA040891
Точно она же там есть!!!! Почемуто Ctrl+F вбиваю в поиск FT_SetBitMode и не находит :((

Может из-зи того что у меня FT232R????

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 20:37:51
polyname
Порядок передачи данных у Си и паскаля разный. Постоянно помнить об этом и не забывать чистить стек.
так для этого и используется cdecl и stdcall - для вызова С-функций, подключал внешний DLL к проекту - все отлично работало

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 20:53:38
cahek80
vem566, по-моему там тока интерфейсы.. или я недоглядел )))

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 21:13:50
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'
ну и много чего ещё :(

Re: Delphi & FT232RL

Добавлено: Пт фев 15, 2013 21:50:04
cahek80
складываю лапки и ухожу скромно в сторону. (у меня всё компилится)

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 07:25:52
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 - принятые соглашения вызовов между языками. Внутри своего проекта можно изголяться как угодно. Просто никому не охота. Да и не нужно.

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 08:32:36
cahek80
vem566 писал(а):Надо думать, что и работает. Почему нет?
не работает, dll хочет :)

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 09:19:15
vem566
Так её нужно скомпилить из файла ftd2xx.h. Нужно посмотреть директивы компилятора Си, чтобы собрал библиотеку.
Сам с Си пробовал работать лет 20 назад, поэтому по нему что-то конкретное сказать не смогу.

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 09:22:40
cahek80
нууу.. у меня нет си. да и в самом файле исполняемого кода не видел. только объявления методов..

Re: Delphi & FT232RL

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

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 10:12:17
cahek80
vem566, ну это к топикстартеру вопрос )) я смотрел просто ради интереса.

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 11:36:02
polyname
Так её нужно скомпилить из файла ftd2xx.h.
зачем ? DLL там готовая лежит, нужно только скопировать в windows/system32. А на основе ftd2xx.h нужно написать свой интерфейсный pascal-файл.

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 13:01:17
DIMA040891
Дыг в итоге :) что мне делать то???????????? :)

Re: Delphi & FT232RL

Добавлено: Сб фев 16, 2013 13:36:34
cahek80
по-моему выше вариант решения писали уже

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

procedure TForm1.Button2Click(Sender: TObject);
begin
Set_USB_Device_BitMode( CBUS3_out+CBUS2_out+CBUS1_out+CBUS0_out+CBUS3, $20);
end;