源文件这样写的...
VOID CALLBACK CH375_DEVICE_ARRIVAL_REMOVE_EVENT(ULONG iEventStatus ) { if(iEventStatus == CH375_DEVICE_ARRIVAL) { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备已经连接..."; } else if(iEventStatus == CH375_DEVICE_REMOVE) { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备没有连接..."; } }
CH375SetTimeout( mIndex, 3000, 3000 ); // 设置USB数据读写的超时,超过3000mS未完成读写将强制返回,避免一直等待下去 CH375SetExclusive( mIndex, FALSE ); // 临时设置共享使用当前CH375设备,因为下面设置中断服务程序时需要使用当前这个CH375设备 //初始化设备插拔事件 CH375SetDeviceNotify(mIndex,0,CH375_DEVICE_ARRIVAL_REMOVE_EVENT); CH375SetExclusive( mIndex, TRUE ); // 设置独占使用当前CH375设备,在此之后其它应用程序不能同时使用当前这个CH375设备
//---------------------------------------------------------------------------
#include #pragma hdrstop
#include "BCB_BLS.h" #include "CH375DLL.H" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TFormMain *FormMain; HWND mSaveDialogMain; // 主对话框 unsigned char mIndex; //--------------------------------------------------------------------------- __fastcall TFormMain::TFormMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- // 设备插拔事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 //--------------------------------------------------------------------------- VOID CALLBACK CH375_DEVICE_ARRIVAL_REMOVE_EVENT(ULONG iEventStatus ) { if(iEventStatus == CH375_DEVICE_ARRIVAL) { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备已经连接..."; } else if(iEventStatus == CH375_DEVICE_REMOVE) { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备没有连接..."; } } //--------------------------------------------------------------------------- void __fastcall TFormMain::FormCreate(TObject *Sender) { unsigned char *iDeviceID; mIndex = 0;
if ( LoadLibrary( "CH375DLL.DLL" ) == NULL ) // 加载DLL失败,可能未安装到系统中 { MessageBox(0,"无法加载CH372的DLL", "提示信息", MB_ICONSTOP | MB_OK ); } else if ( CH375OpenDevice(0) == INVALID_HANDLE_VALUE ) // 使用之前必须打开设备 { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备没有连接..."; } else { FormMain->MainFrmStatusBar->Panels->Items[0]->Text ="设备已经连接..."; } // CH375SetTimeout( mIndex, 3000, 3000 ); // 设置USB数据读写的超时,超过3000mS未完成读写将强制返回,避免一直等待下去 CH375SetExclusive( mIndex, FALSE ); // 临时设置共享使用当前CH375设备,因为下面设置中断服务程序时需要使用当前这个CH375设备 //初始化设备插拔事件 //CH375SetDeviceNotify(mIndex,iDeviceID,CH375_DEVICE_ARRIVAL_REMOVE_EVENT); CH375SetExclusive( mIndex, TRUE ); // 设置独占使用当前CH375设备,在此之后其它应用程序不能同时使用当前这个CH375设备 }
楼主 可以参考一下:http://www.wch.cn/bbs/View.asp?S=101&I=10683
楼主也可以到这个链接 http://www.wch.cn/download/list.asp?id=29 下载CH372EVT,在CH372EVT\BC目录下有一个有关BC的例子程序
我就是参照http://www.wch.cn/bbs/View.asp?S=101&I=10683 改的.........
不是所有函数不能用,我想添加一个设备的插拔事件出来的问题,就是设备的插入或设备的拔出触发的事件
http://www.wch.cn/download/list.asp?id=29 给出的是BC的,在BCB下老是提示有问题
我就是根据http://www.wch.cn/bbs/View.asp?S=101&I=10683修改的程序
如果不用USB中断事件,USB插拔事件的情况下可以与设备正常通讯,写数据和读数据都很正常,只要使用了事件触发就出这种问题............
希望做过的大侠指点一二.....
我现在的处理方式使用Timer查询是可以使用的.........
总算搞定了,在网站下载的文件包中的文件CH375DLL.DEF少了函数声明 CH375DLL.CH375SetDeviceNotify
但是这句没有任何警告 CH375SetDeviceNotify(mIndex,iDeviceID,CH375_DEVICE_ARRIVAL_REMOVE_EVENT);
而且编译全部通过,可以生成.EXE可执行文件,但是程序一运行就出错,所以一直难差问题所在.....
我也遇到同样的问题,请问能提供一下你的测试工程吗?我的邮箱:个人信息保护,已隐藏