Delphi & FT232RL
- DIMA040891
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Чт дек 03, 2009 19:55:03
Re: Delphi & FT232RL
в модуле который D2XXUnit
Re: Delphi & FT232RL
DIMA040891 писал(а):Что то я вообще ничего не понимаб
Как обычно, верхоглядство до добра не доводит (это я про себя).
Теперь хоть понятие есть, как это реализовано.
Файл ftd2xx.h - это исходник для библиотеки FTD2XX.DLL на Си.
- DIMA040891
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Чт дек 03, 2009 19:55:03
Re: Delphi & FT232RL
И получается изпользовать её тоже не получится 
Re: Delphi & FT232RL
Почему? Запустить CBuilder (если при установки Delphi его не выкинул), и скомпилируй dll. Или любой компилятор Си.
- DIMA040891
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Чт дек 03, 2009 19:55:03
Re: Delphi & FT232RL
Почему то DEV-C++ не компилирует... вообще ничего не происходит

- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: Delphi & FT232RL
Так получается после добавления в "uses" модуля D2XXUnit (файл D2XXUnit.pas) компилятор все равно не находит функцию? А она ведь есть, строка 367:
Может лучше разобраться, почему такое происходит?
PS. Как вариант у вас появился отличный повод начать изучать Си.
Код: Выделить всё
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
Точно она же там есть!!!! Почемуто Ctrl+F вбиваю в поиск FT_SetBitMode и не находит
(
Может из-зи того что у меня FT232R????
Может из-зи того что у меня FT232R????
Re: Delphi & FT232RL
так для этого и используется cdecl и stdcall - для вызова С-функций, подключал внешний DLL к проекту - все отлично работалоПорядок передачи данных у Си и паскаля разный. Постоянно помнить об этом и не забывать чистить стек.
Re: Delphi & FT232RL
vem566, по-моему там тока интерфейсы.. или я недоглядел )))
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
- DIMA040891
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Чт дек 03, 2009 19:55:03
Re: Delphi & FT232RL
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
складываю лапки и ухожу скромно в сторону. (у меня всё компилится)
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Delphi & FT232RL
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
vem566 писал(а):Надо думать, что и работает. Почему нет?
не работает, dll хочет
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Delphi & FT232RL
Так её нужно скомпилить из файла ftd2xx.h. Нужно посмотреть директивы компилятора Си, чтобы собрал библиотеку.
Сам с Си пробовал работать лет 20 назад, поэтому по нему что-то конкретное сказать не смогу.
Сам с Си пробовал работать лет 20 назад, поэтому по нему что-то конкретное сказать не смогу.
Re: Delphi & FT232RL
нууу.. у меня нет си. да и в самом файле исполняемого кода не видел. только объявления методов..
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Delphi & FT232RL
Сам же говорил, что в нем(файле) только интерфейс. Для связи с драйверами USB. Похоже через промежуточную библиотеку FTD2XX_API.dll. Я и говорю, что подобные конструкции плохо усваиваются. Да и по большому счету на хрен не нужны. Есть реальная задача, которую можно решить не прибегая к подобному извращению. Никогда не был сторонником подключения в проект подобных маловменяемых вещей. Потраченное время на разбирательство себя не оправдывает. И Си у меня тоже нет за ненадобностью. Все проблемы решались либо с помощью Delphi + WinApi, либо, очень редко, ассемблеровской вставкой в Delphi.
А разбираться с ftd2xx ... Зачем?
А разбираться с ftd2xx ... Зачем?
Re: Delphi & FT232RL
vem566, ну это к топикстартеру вопрос )) я смотрел просто ради интереса.
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Delphi & FT232RL
зачем ? DLL там готовая лежит, нужно только скопировать в windows/system32. А на основе ftd2xx.h нужно написать свой интерфейсный pascal-файл.Так её нужно скомпилить из файла ftd2xx.h.
- DIMA040891
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Чт дек 03, 2009 19:55:03
Re: Delphi & FT232RL
Дыг в итоге
что мне делать то???????????? 
Re: Delphi & FT232RL
по-моему выше вариант решения писали уже
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
Set_USB_Device_BitMode( CBUS3_out+CBUS2_out+CBUS1_out+CBUS0_out+CBUS3, $20);
end;Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!