Как обычно, верхоглядство до добра не доводит (это я про себя).DIMA040891 писал(а):Что то я вообще ничего не понимаб
Теперь хоть понятие есть, как это реализовано.
Файл ftd2xx.h - это исходник для библиотеки FTD2XX.DLL на Си.
Как обычно, верхоглядство до добра не доводит (это я про себя).DIMA040891 писал(а):Что то я вообще ничего не понимаб
Код: Выделить всё
function FT_SetBitMode(ftHandle:Dword; Mask,Enable:Byte):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBitMode';
only pure true norwegian blackx 
так для этого и используется cdecl и stdcall - для вызова С-функций, подключал внешний DLL к проекту - все отлично работалоПорядок передачи данных у Си и паскаля разный. Постоянно помнить об этом и не забывать чистить стек.
vem566 писал(а):Нет, не так.
Во-первых, модуль уже так и прописан, во-вторых проблема в вызове функции из этого модуля.
Нужно в самом модуле D2XX, описание этой функции в разделе реализации
implementation
...
function FT_SetBitMode(........);
перенести в раздел
interface
function FT_SetBitMode(........);
Именно перенести, а не скопировать. После этого, для полной уверенности, переименовать файл D2XXUnit.dcu во что-нибудь, типа D2XXUnit.dc_, или во что угодно. После компиляции файл dcu будет создан снова, но уже измененный.
Не часто, но в практике натыкался на такие конструкции, как здесь. Может авторы преследовали какие-то цели при сотворении подобных вывертов, но мне они не известны. Одно могу отметить - мозги, у не нашего народа, работают по другому. Наворотить все это для того, чтобы вызвать функцию WinApi. Похоже на некую универсальную конструкцию.cahek80 писал(а):по-моему там тока интерфейсы.. или я недоглядел
Надо думать, что и работает. Почему нет?cahek80 писал(а):у меня всё компилится
Нет её в модуле. Есть только ссылка. Подчеркнутое означает, что функция находится во внешнем модуле с именем FT_DLL_Name. Имя её во внешнем модуле 'FT_SetBitMode'.blackx писал(а):А она ведь есть, строка 367:
Код:
function FT_SetBitMode(ftHandle:Dword; Mask,Enable:Byte):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBitMode';
Вообще-то способов вызова функций шесть. Хотя thiscall и stdcall по сути одинаковы. Может те, кто пишет на Си их как-то различают, не знаю.polyname писал(а):так для этого и используется cdecl и stdcall
не работает, dll хочетvem566 писал(а):Надо думать, что и работает. Почему нет?
зачем ? DLL там готовая лежит, нужно только скопировать в windows/system32. А на основе ftd2xx.h нужно написать свой интерфейсный pascal-файл.Так её нужно скомпилить из файла ftd2xx.h.
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
Set_USB_Device_BitMode( CBUS3_out+CBUS2_out+CBUS1_out+CBUS0_out+CBUS3, $20);
end;