QT项目和USB连接



我的FTD2xx驱动程序有问题。我在Fedora 26(64位(中使用QT(C++(;2232H";装置此外,构建方法是:

qmake /Address/ProjectName.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug

问题:

FT_Status在FT_openex(….(命令处返回0(FT_OK(,但对于FTD2xx-lib的其他函数返回none_zero(FT_OK(;我的代码的一部分:

FT_HANDLE   ftH;
FT_STATUS   ftStatus;
ftStatus = FT_OpenEx(const_cast<char*>("MYDevName"), FT_OPEN_BY_SERIAL_NUMBER, &ftH);
std::cout<<"FTST open:"<< ftStatus<<std::endl;
char a[10];DWORD b;
ftStatus = FT_SetBitMode(&ftH,0xff,0);
std::cout<<"FTST RESET:"<< ftStatus<<std::endl;
ftStatus = FT_SetBitMode(&ftH,0xff,0x40);
std::cout<<"FTST SPEED:"<< ftStatus<<std::endl;
ftStatus = FT_Close(&ftH);
std::cout<<"FTST CLOSE:"<< ftStatus<<std::endl;
And output :
FTST open:0
FTST RESET:1
FTST SPEED:1
FTST CLOSE:1
ftStatus =1 ;means FT_INVALID_HANDLE.
and
Command <<rmmod ftdi_sio >> is using.
and
Lib directory: /dev/local/lib
and
QT setting:
LIBS += -L$$PWD/../../../usr/local/lib/ -lftd2xx
INCLUDEPATH += $$PWD/../../../usr/local/include
DEPENDPATH += $$PWD/../../../usr/local/include

FT_HANDLEFT_OpenEx中的一个输出参数。您正在正确传递&ftH,以便函数可以覆盖ftH

FT_HANDLE是其它功能的输入参数。您错误地通过了&ftH,应该只通过ftH

FT_Close(&ftH);FT_Close(ftH);

不幸的是,FT_HANDLE是以一种松散类型的方式定义的:

typedef void* PVOID;
typedef PVOID FT_HANDLE;

由于void**隐式转换为void*,编译器无法帮助您发现这个错误1。通常,不透明句柄类型应声明为

typedef struct AlwaysIncompleteType * MY_HANDLE;

然后指针和双指针类型将适当地不兼容。


1更糟糕的是,在C中,从void*void**的反向转换也是隐式的,并且您可以调用FT_OpenEx(..., ftH),这可能会导致立即访问冲突(也称为分段故障(,并可能导致不可预测的内存损坏。至少C++做对了。。。但是CCD_ 16仍然不利于强类型检查。

相关内容

  • 没有找到相关文章

最新更新