Страница 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. При этом, вылетает оно только тогда, когда устройство подключено - иначе функция спокойно возвращает штатную ошибку, обрабатываемую приложением.

Что делать, товарищи? Я скоро головой об стенку биться начну... :cry:

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.

Всем ответившим спасибо. :beer: