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
这个地方有问题 烦!这么回事?
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
这个地方有问题 烦!这么回事?