VC下的DLL如下:
头文件如下:
typedef struct ReadCheckCard{
unsigned long UserCode_Card;
int isydl_Card;
int iaddgdl_Card;
int iusedl_Card;
int itimes_Card;
int iMaxNum_Card;
int iDownNum_Card;
int iMinNum_Card;
unsigned long FixtureCode_Card;
int ErrorNum_Card;
} MyReadCheckCard;
int __declspec(dllexport) __stdcall ReadCheckCardInfo(MyReadCheckCard * mc) {
DWORD return_code;
BYTE _bATR[4];
BYTE _bFuse[1];
BYTE _bReadData[3];
DWORD *_dwValue;
mc->ErrorNum_Card=0; //初始化
return_code=MCS_SetStringMode(0);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card;
}
//卡上电操作
return_code=AT153_OpenCard(_bATR);
if(return_code!=0){
mc->ErrorNum_Card=2;
return mc->ErrorNum_Card;
} //读卡操作
return_code=AT153_ReadATR(_bATR);
if(return_code!=0){
mc->ErrorNum_Card=3;
return FALSE; }
if(_bATR[0]!=0x2C && _bATR[1]!=0xAA && _bATR[2]!=0x55 && _bATR[3]!=0xA1)
{
mc->ErrorNum_Card=4;
return mc->ErrorNum_Card;
} //判断熔丝;
return_code=AT153_ReadFuse(_bFuse);
if(return_code!=0){
mc->ErrorNum_Card=5;
return mc->ErrorNum_Card; }
if(_bFuse[0]!=6) //实际应为6;
{
mc->ErrorNum_Card=6;
return mc->ErrorNum_Card;
} //读用户户号
DWORD m_seluser; _dwValue=&m_seluser; return_code=AT153_ReadValue(0x1F,2,_dwValue);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else {mc->UserCode_Card =*_dwValue; }
//读剩余电量
return_code=AT153_ReadChar(0x11,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->isydl_Card=_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536; }
//读累计购电量
BYTE _bReadData1[3];
return_code=AT153_ReadChar(0x14,3,2,_bReadData1);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iaddgdl_Card=_bReadData1[0]+_bReadData1[1]*256+_bReadData1[2]*65536; } //读累计用电量
BYTE _bReadData2[3];
return_code=AT153_ReadChar(0x17,3,2,_bReadData2);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{mc->iusedl_Card =_bReadData2[0]+_bReadData2[1]*256+_bReadData2[2]*65536; }
//读购电次数
BYTE _bReadData3[3];
return_code=AT153_ReadChar(0x24,2,2,_bReadData3);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->itimes_Card =_bReadData3[0]+_bReadData3[1]*256; } //读囤积电量
return_code=AT153_ReadChar(0x08,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iMaxNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读报警电量1
return_code=AT153_ReadChar(0x0b,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iDownNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读报警电量2
return_code=AT153_ReadChar(0x0e,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{mc->iMinNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读电表编号 return_code=AT153_ReadValue(0x1a,2,_dwValue);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->FixtureCode_Card=*_dwValue;}
return_code=AT153_CloseCard();
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card;
}
else{return mc->ErrorNum_Card;}}
VB中调用代码如下:
声明:
Public Declare Function ReadCheckCardInfo Lib "test" (ReadCheck As MyReadCheckCard) As Integer Public Type MyReadCheckCard FixtureCode_Card As String * 10
iMinNum_Card As Long
iDownNum_Card As Long
iMaxNum_Card As Long iTimes_Card As Long
iUseNum_Card As Long
iaddgdl_Card As Long
isydlNum_Card As Long
UserCode_Card As String * 10
ErrorNum_Card As LongEnd Type
调用:
Dim iNum As Integer
Dim Read_Check As MyReadCheckCard
Read_Check.ErrorNum_Card = 0
Read_Check.UserCode_Card = ""
Read_Check.isydlNum_Card = 0:
Read_Check.iaddgdl_Card = 0:
Read_Check.iUseNum_Card = 0:
Read_Check.iTimes_Card = 0:
Read_Check.iMaxNum_Card = 0:
Read_Check.iDownNum_Card = 0:
Read_Check.iMinNum_Card = 0
Read_Check.FixtureCode_Card = ""
iNum = ReadCheckCardInfo(Read_Check)问:这些返回值的次序不对,请问各位有什么办法?在此多谢了!!!!
头文件如下:
typedef struct ReadCheckCard{
unsigned long UserCode_Card;
int isydl_Card;
int iaddgdl_Card;
int iusedl_Card;
int itimes_Card;
int iMaxNum_Card;
int iDownNum_Card;
int iMinNum_Card;
unsigned long FixtureCode_Card;
int ErrorNum_Card;
} MyReadCheckCard;
int __declspec(dllexport) __stdcall ReadCheckCardInfo(MyReadCheckCard * mc) {
DWORD return_code;
BYTE _bATR[4];
BYTE _bFuse[1];
BYTE _bReadData[3];
DWORD *_dwValue;
mc->ErrorNum_Card=0; //初始化
return_code=MCS_SetStringMode(0);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card;
}
//卡上电操作
return_code=AT153_OpenCard(_bATR);
if(return_code!=0){
mc->ErrorNum_Card=2;
return mc->ErrorNum_Card;
} //读卡操作
return_code=AT153_ReadATR(_bATR);
if(return_code!=0){
mc->ErrorNum_Card=3;
return FALSE; }
if(_bATR[0]!=0x2C && _bATR[1]!=0xAA && _bATR[2]!=0x55 && _bATR[3]!=0xA1)
{
mc->ErrorNum_Card=4;
return mc->ErrorNum_Card;
} //判断熔丝;
return_code=AT153_ReadFuse(_bFuse);
if(return_code!=0){
mc->ErrorNum_Card=5;
return mc->ErrorNum_Card; }
if(_bFuse[0]!=6) //实际应为6;
{
mc->ErrorNum_Card=6;
return mc->ErrorNum_Card;
} //读用户户号
DWORD m_seluser; _dwValue=&m_seluser; return_code=AT153_ReadValue(0x1F,2,_dwValue);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else {mc->UserCode_Card =*_dwValue; }
//读剩余电量
return_code=AT153_ReadChar(0x11,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->isydl_Card=_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536; }
//读累计购电量
BYTE _bReadData1[3];
return_code=AT153_ReadChar(0x14,3,2,_bReadData1);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iaddgdl_Card=_bReadData1[0]+_bReadData1[1]*256+_bReadData1[2]*65536; } //读累计用电量
BYTE _bReadData2[3];
return_code=AT153_ReadChar(0x17,3,2,_bReadData2);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{mc->iusedl_Card =_bReadData2[0]+_bReadData2[1]*256+_bReadData2[2]*65536; }
//读购电次数
BYTE _bReadData3[3];
return_code=AT153_ReadChar(0x24,2,2,_bReadData3);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->itimes_Card =_bReadData3[0]+_bReadData3[1]*256; } //读囤积电量
return_code=AT153_ReadChar(0x08,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iMaxNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读报警电量1
return_code=AT153_ReadChar(0x0b,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->iDownNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读报警电量2
return_code=AT153_ReadChar(0x0e,3,2,_bReadData);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{mc->iMinNum_Card =_bReadData[0]+_bReadData[1]*256+_bReadData[2]*65536;}
//读电表编号 return_code=AT153_ReadValue(0x1a,2,_dwValue);
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card; }
else{ mc->FixtureCode_Card=*_dwValue;}
return_code=AT153_CloseCard();
if(return_code!=0){
mc->ErrorNum_Card=1;
return mc->ErrorNum_Card;
}
else{return mc->ErrorNum_Card;}}
VB中调用代码如下:
声明:
Public Declare Function ReadCheckCardInfo Lib "test" (ReadCheck As MyReadCheckCard) As Integer Public Type MyReadCheckCard FixtureCode_Card As String * 10
iMinNum_Card As Long
iDownNum_Card As Long
iMaxNum_Card As Long iTimes_Card As Long
iUseNum_Card As Long
iaddgdl_Card As Long
isydlNum_Card As Long
UserCode_Card As String * 10
ErrorNum_Card As LongEnd Type
调用:
Dim iNum As Integer
Dim Read_Check As MyReadCheckCard
Read_Check.ErrorNum_Card = 0
Read_Check.UserCode_Card = ""
Read_Check.isydlNum_Card = 0:
Read_Check.iaddgdl_Card = 0:
Read_Check.iUseNum_Card = 0:
Read_Check.iTimes_Card = 0:
Read_Check.iMaxNum_Card = 0:
Read_Check.iDownNum_Card = 0:
Read_Check.iMinNum_Card = 0
Read_Check.FixtureCode_Card = ""
iNum = ReadCheckCardInfo(Read_Check)问:这些返回值的次序不对,请问各位有什么办法?在此多谢了!!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货