bcb中有关dll的问题。几天没有解决!(读卡器的连接)(100分)

  • 主题发起人 主题发起人 bwind
  • 开始时间 开始时间
B

bwind

Unregistered / Unconfirmed
GUEST, unregistred user!
几点说明:
1.该程序由vc移植过来,vc下运行的很好
2.mwic_32.dll是深圳明华的,我没有原码
3.bcb的implib,coff2omf我都试过,结果一样。
4.不论读卡器是有没有打开、自动连接还是选择com和hz连接,结果一样。
***************************************************
#include "mwic_32.h"
...

HANDLE ICDEV;
AnsiString NUM_IC; //IC卡编号

//线程函数,用于建立连接
UINT ThreadConnect()
{
//HWnd hForm = (HWND)pParam;
HANDLE hTemp=0;
int i;
ic_exit(ICDEV);

for(i = 0; i<4; i++)
{
g_strAdd = "正在检测COM"+IntToStr(i+1)+" 口.../r/n";
SendMessage(Application->Handle, WM_DISPLAY/*自定义*/, NULL, NULL); //Application->Handle会不会有问题?

if( int(hTemp = auto_init(i,9600)) >0 ) //一个串口连接成功
{
g_strAdd = "连接成功,COM"+IntToStr(i+1)+" 口,频率9600。/r/n";
ICDEV = hTemp;
PostMessage(Application->Handle, WM_DISPLAY, 1, NULL);
break; // 找到一个串口就退出
}
}

if(0==hTemp)
{
g_strAdd = "连接失败!/r/n";
PostMessage(Application->Handle, WM_DISPLAY, NULL, NULL);
}

return 0;
}

void __fastcall TfrmMain::btnConnectClick(TObject *Sender)
{
lbResult->Items->Add("正在连接......");
lbResult->ItemIndex=lbResult->Items->Count-1;

if( rbAuto->Checked ) //自动连接
{
unsigned threadID = 0;
BeginThread(0,2048,(TThreadFunc)ThreadConnect, 0, false,threadID); //
}
else //选择连接
{
int nCom =0;
nCom = cbCOM->ItemIndex; //不选择COM的话nCom=-1
int nHz = StrToInt(cbHZ->Text);
ic_exit(ICDEV);
HANDLE hTemp = auto_init(nCom, nHz);

if((int)hTemp>0)
{
ICDEV = hTemp;
AnsiString msg("连接成功,COM"+IntToStr(nCom)+"口,频率"+IntToStr(nHz));
lbResult->Items->Add(msg);
lbResult->ItemIndex=lbResult->Items->Count-1;
}
else
{
lbResult->Items->Add("连接失败!");
lbResult->ItemIndex=lbResult->Items->Count-1;
}
}

}


mwic_32.h中的内容是:
extern "C"
{
HANDLE __stdcall ic_init(__int16 port,unsigned long baud);
HANDLE __stdcall auto_init(__int16 port,unsigned long baud);
__int16 __stdcall ic_exit(HANDLE icdev);
__int16 __stdcall srd_ver(HANDLE icdev, __int16 len,unsigned char *data_buffer);
}

auto_init处出现错误:EExternalException in module ntdll.dll
同时提示forms.hpp中的
#pragma option push -w-inl
/* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { }
#pragma option pop
这个地方有问题 烦!这么回事?
 
int i;<<<<1
....
if( int(hTemp = auto_init(i,9600)) >0

HANDLE __stdcall auto_init(__int16 port,unsigned long baud);<<<<<2
port 定义为 __int16,而 定义为int ,
__int16应该是2byte ,int为4byte,

可能是这个原因 ,C 我不熟



 
同样的代码。在vc中运行的很好,可是在cb中就是不行,有没有连接读卡器效果都是一样的。
连chk_baud都返回-141
下载了 明华的ic卡演示程序。他里边有很多exsample可是惟独没有cb的,是 不是DLL本身就有
问题。
希望有此成功经验者赐教!


函数错误类型代码(均为负值)
 
-0X80 (-128) 读错误 -0X8D (-141) 通用错误
-0X81 (-129) 写错误 -0X8E (-142) 命令头错误
-0X82 (-130) 命令错误 -0X8F (-143) 长度错误
-0X83 (-131) 密码错误 -0X90 (-144) 地址错误
-0X84 (-132) 超时错误 -0X91 (-145) 长度错误
-0X85 (-133) 测卡错误 -0X94 (-148) 帧错误
-0X86 (-134) 无卡错误 -0X95 (-149) 串口占用
-0X87 (-135) 超值错误 CPU卡读写器的错误代码:
-0X88 (-136) 通讯错误 -0XCA (-202) 校验和错误
-0X89 (-137) 卡型错误 -0XCB (-203) 长度错误
-0X8A (-138) 校验和错误 -0XCD (-205) 操作码错误
-0X8B (-139) 卡型错误 -0XCE (-206) 校验位错误
-0X8C (-140) 非法拔卡 -0XCF (-207) 通讯超时
   
 


 
后退
顶部