C++ 使用C+从磁卡读卡器MT188读取数据+;

C++ 使用C+从磁卡读卡器MT188读取数据+;,c++,dll,serial-port,C++,Dll,Serial Port,我正在尝试从磁卡读卡器读取数据,它的型号是MT188。读卡器附带DLL和DLL中函数的文档。读取卡片的过程如下所示 HANDLE APIENTRY CommOpenWithBaut(UINT nPort, UINT _data) 开放式串行通信示例:CommOpenWithBaut(19600) 检查设备状态 读取磁卡数据 读取卡后关闭端口 每个函数都有一个返回值。这是一个cout的示例,您实际上并没有调用MagRead、CarderCheckSt或CommClose,因为您没有将它们作为带

我正在尝试从磁卡读卡器读取数据,它的型号是MT188。读卡器附带DLL和DLL中函数的文档。读取卡片的过程如下所示

HANDLE APIENTRY CommOpenWithBaut(UINT nPort, UINT _data) 
开放式串行通信示例:CommOpenWithBaut(19600)

检查设备状态

读取磁卡数据

读取卡后关闭端口


每个函数都有一个返回值。这是一个
cout的示例,您实际上并没有调用
MagRead
CarderCheckSt
CommClose
,因为您没有将它们作为带括号和参数的函数调用。您只是将它们作为函数指针打印出来,因此您看到的值表示函数入口点的地址

相反,您需要为每个函数提供合适的参数。从“open”函数中,您将获得一个句柄,该句柄将传递给所有后续函数

#include <iostream>

extern "C" {    
    #include <mt188.h> // The header for your C library
}

using namespace std;

int main(int argc, char* argv[])
{
    // Open the device

    HANDLE port = CommOpenWithBaut(1, 9600);

    if (port == 0)
    {
        cerr << "Cannot open device";
        return -1;
    }

    // Read status

    unsigned char PewSt = 0;
    unsigned char CardType = 0;
    unsigned char CardSt = 0;
    unsigned char PowerSt = 0;

    int rc = CarderCheckSt(port, PewSt, CardType, CardSt, PowerSt);

    // Read buffer of data

    int bufferSize = 128;
    BYTE buffer[bufferSize];

    int bytesRead = MagRead(port, buffer, bufferSize);

    //

    CommClose(port);

    return 0;
}
#包括
外部“C”{
#包含//C库的头
}
使用名称空间std;
int main(int argc,char*argv[])
{
//打开设备
手柄端口=CommOpenWithBaut(1,9600);
如果(端口==0)
{

谢谢你的回答,但我仍然无法打开与读卡器的通信
无法打开设备
。关于如何解决这个问题,有什么想法吗?我想试试其他端口。它是串行连接吗?然后打开设备管理器,查看设备连接到哪个COM端口。你需要安装驱动程序或VCP吗?在没有API参考的情况下很难进行猜测。我可以在端口1和波特率9600上使用测试应用程序与设备通信。我不需要只安装DLL驱动程序。我有一个错误:
LNK2019未解析的外部符号“\uu declspec(dllimport)void*\uu cdecl CommOpenWithBaut(unsigned int,unsigned int)”()进口商品@@YAPEAXII@Z)函数main中引用的
这可能与问题有关?API引用没有提到太多。此外,这是我头文件中的标记。
#include#include#ifdef Modulev188_EXPORTS#define Modulev188_uapi u declspec(dllexport)#else#define Modulev188 API u declspec(dllimport)#endif
以下是函数:
Modulev188_API HANDLE CommOpenWithBaut(UINT nPort,UINT _data);Modulev188_API int CommClose(HANDLE hComHandle);Modulev188_API int CarderCheckSt(HANDLE hComHandle,unsigned char&PewSt,unsigned char&CardType,unsigned char&CardSt,unsigned char&PowerSt);Modulev188 API int MagRead(句柄hComHandle,字节*MagData,int和lenth);
int APIENTRY MagRead(HANDLE hComHandle,BYTE *MagData,int &lenth) 
int APIENTRY CommClose(HANDLE hComHandle); 
int main(int arg, char* argc[])
{
    CommOpenWithBaut(1,9600);
    cout<< "This is the cards data:  " << MagRead << endl;
    cout << "This is the cards status:  " << CarderCheckSt << endl;
    CommClose;
}
LNK2019 unresolved external symbol "__declspec(dllimport) void * __cdecl CommOpenWithBaut(unsigned int,unsigned int)" (__imp_?CommOpenWithBaut@@YAPEAXII@Z) referenced in function main 
#include <iostream>
#include <windows.h>

#ifdef Modulev188_EXPORTS
#define Modulev188_API __declspec(dllexport)
#else
#define Modulev188_API __declspec(dllimport)
#endif

Modulev188_API HANDLE  CommOpenWithBaut(UINT nPort, UINT _data);
Modulev188_API int  CommClose(HANDLE hComHandle);
Modulev188_API int  CarderCheckSt(HANDLE hComHandle, unsigned char& PewSt, unsigned char& CardType, unsigned char& CardSt, unsigned char& PowerSt);
Modulev188_API int  CarderVersion(HANDLE hComHandle, unsigned char* VersionNo, int& lenth);
//DLLEXPORT int WINAPI ContactCPU_ColdReset(HANDLE hComHandle, BYTE* _CPUTYPE, BYTE* _exData, int* _exdataLen);
//DLLEXPORT int WINAPI ContactCPU_Dormancy(HANDLE hComHandle);
Modulev188_API int  ContactCPU_CAPDU(HANDLE hComHandle, int _dataLen, BYTE* _APDUData, BYTE* _exData, int* _exdataLen);
Modulev188_API int  SIM_Reset(HANDLE hComHandle, BYTE _VOLTAGE, BYTE _SIMNo, BYTE& _SIMTYPE, BYTE* _exData, int& _exdataLen);
Modulev188_API int  SIM_C_APDU(HANDLE hComHandle, BYTE SIMNo, int _dataLen, BYTE* _APDUData, BYTE* _exData, int& _exdataLen);
Modulev188_API int  SIM_CardClose(HANDLE hComHandle);
Modulev188_API int  MagRead(HANDLE hComHandle, BYTE* MagData, int& lenth);
Modulev188_API int  MagCleaner(HANDLE hComHandle);
#include <iostream>

extern "C" {    
    #include <mt188.h> // The header for your C library
}

using namespace std;

int main(int argc, char* argv[])
{
    // Open the device

    HANDLE port = CommOpenWithBaut(1, 9600);

    if (port == 0)
    {
        cerr << "Cannot open device";
        return -1;
    }

    // Read status

    unsigned char PewSt = 0;
    unsigned char CardType = 0;
    unsigned char CardSt = 0;
    unsigned char PowerSt = 0;

    int rc = CarderCheckSt(port, PewSt, CardType, CardSt, PowerSt);

    // Read buffer of data

    int bufferSize = 128;
    BYTE buffer[bufferSize];

    int bytesRead = MagRead(port, buffer, bufferSize);

    //

    CommClose(port);

    return 0;
}