Страница 1 из 1
Помогите совладать с FTD2XX
Добавлено: Пн авг 16, 2010 20:13:24
YS
Итак, товарищи, назрела у меня необходимость в использовании этой либы. Бьюсь уже два дня, моральные силы на исходе, но ничего так и не выходит. Использую Visual C++ Express Edition 2008 и Borland C++ Builder 6.
В Visual C++:
В начале кода добавляю (все лежит в нужной папке):
Код: Выделить всё
#include "ftd2xx.h"
#pragma comment(lib,"ftd2xx.lib")
При компиляции выдает ошибку:
Код: Выделить всё
ConSysTest.obj : error LNK2001: неразрешенный внешний символ "__imp__FT_Open@8"
ConSysTest.obj : error LNK2001: неразрешенный внешний символ "__imp__FT_Close@4"
В C++ Builder:
Все замечательно добавляется, интегрируется, компилируется, запускается. Но при вызове FT_Open() приложение вылетает с Access Violation Exception. При этом, вылетает оно только тогда, когда устройство подключено - иначе функция спокойно возвращает штатную ошибку, обрабатываемую приложением.
Что делать, товарищи? Я скоро головой об стенку биться начну...

Re: Помогите совладать с FTD2XX
Добавлено: Пн авг 16, 2010 23:26:16
Digikey
В C++ Builder
Для BCB формат файла импорта (lib) не совпадает с MSVS.
Для решения этой проблемы имеется утилита IMPLIB, которая по dll генерирует lib.
Вызывается так: IMPLIB ftd2xx.lib ftd2xx.dll
Получившийся ftd2xx.lib включаете в проект
Re: Помогите совладать с FTD2XX
Добавлено: Пн авг 16, 2010 23:53:13
YS
Для BCB формат файла импорта (lib) не совпадает с MSVS.
Я знаю. Естесственно, в начале речь идет о проекте с правильным .lib файлом. Однако, попробую и Ваш...
Re: Помогите совладать с FTD2XX
Добавлено: Вт авг 17, 2010 00:01:12
YS
Попробовал. То же самое.
Пишу под консоль:
Код: Выделить всё
//----------
#pragma hdrstop
#include <windows.h>
#include "ftd2xx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
//----------
#pragma argsused
int main(int argc, char* argv[])
{
FT_HANDLE ftd;
unsigned long n;
unsigned char buf=255;
FT_STATUS fstate;
fstate=FT_Open(0,ftd);
if (fstate==FT_OK)
{
printf("FT Opened OK\n");
if (FT_SetBaudRate(ftd,110)==FT_OK)
printf("FT_SetBaudRate OK\n");
if (FT_SetDataCharacteristics(ftd,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE)==FT_OK)
printf("FT_SetDataCharacteristics OK\n");
if (FT_SetTimeouts(ftd,500,500)==FT_OK)
printf("FT_SetTimeouts OK\n");
if (FT_SetFlowControl(ftd,FT_FLOW_NONE,0,0)==FT_OK)
printf("FT_SetFlowControl OK\n");
//----------
printf("Writing data...\n");
if (FT_Write(ftd,&buf,1,&n)==FT_OK)
printf("FT_Write OK\n");
printf("Closing FTDI...\n");
if (FT_Close(ftd)==FT_OK)
printf("FTDI closed OK\n");
}
else
{
printf("Couldn't open FTDI.\n");
}
getch();
return 0;
}
//----------
Если устройство не подключено, то все нормально - программа отрабатывает, пишет "Couldn't open FTDI.", все хорошо. Если устройство подключено, то случается такая штука:

Re: Помогите совладать с FTD2XX
Добавлено: Вт авг 17, 2010 03:46:38
Digikey
fstate=FT_Open(0, ftd);
В FT_Open() должен передаваться указатель на FT_HANDLE:
fstate=FT_Open(0,
&ftd);
Re: Помогите совладать с FTD2XX
Добавлено: Вт авг 17, 2010 12:25:16
radiosphera
Вот как я это все подключаю... Работает без ошибок!
Код: Выделить всё
#include "iostream"
#include "windows.h"
#pragma comment( lib,"Ftd2xx.lib" )//Подключение библиотеки драйвера USB
#include "ftd2xx.h" // Подключение хеадера библиотеки драйвера
П.С. Пользуюсь visual studio 2005 proffessional edition))))
Re: Помогите совладать с FTD2XX
Добавлено: Вт авг 17, 2010 19:12:15
YS
Все! Я нашел ошибку!
В общем, меня переклинило: я с чего-то решил, что во
все функции должен передаваться либо сам дескриптор, либо указатель. На самом деле, в FT_Open(...) передается указатель, а в остальные функции -
непосредственно сам дескриптор!
Т.е., FT_Open(num,
&h), но FT_Write(...,
h) !!!
Есть подозрение, что меня смутил IntelliSense: в подсказке для FT_Open фигурирует
void * * (ибо FT_HANDLE есть void*), а в остальных функциях -
void *. Вот я количество звездочек и попутал...
Проблема решена, все работает под мой любимый C++ Builder 6.
Всем ответившим спасибо.
