求助!VC写的DLL文件无法在PB中调用问题!

smw830714 2009-07-06 10:02:17
我现在有一个这样的程序源代码,VC写的头文件!
当然有相关的代码段!
现在问题是这样的,我用VC把他们打包成一个DLL文件,要在PowerBuilder里面来调用!但似乎是不兼容!在PB里调用的时候提示说参数不匹配!
所以在这里请教各位大虾们,帮忙写一个VC代码!用继承的方法,重新生成一个新的DLL文件!只要有头文件就可!谢谢!
新手,没那么多分给大家!后续补上!辛苦大家了!


#ifndef ACR110_H
#define ACR110_H

// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the ACR110U_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// ACR110_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.

#ifdef __GNUC__
typedef signed char INT8, *PINT8;
typedef signed short INT16, *PINT16;
typedef signed int INT32, *PINT32;

typedef unsigned char UINT8, *PUINT8;
typedef unsigned short UINT16, *PUINT16;
typedef unsigned int UINT32, *PUINT32;

typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;

typedef long LONG_PTR, *PLONG_PTR;
typedef unsigned long ULONG_PTR, *PULONG_PTR;
typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;

#define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) < < 8))

typedef void *HANDLE;

#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)

#define ACR110_API
#define AC_DECL
#else
#include <windows.h>
#define ACR110_API
#define AC_DECL __stdcall

typedef unsigned char BYTE;
typedef signed char INT8;
typedef signed short INT16;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
#endif

#define DLL_VER "ACR110U DLL 1.0.0.1"

#define RECEIVED_RESPONSE_SIZE 128
#define CMD_BUFFER_SIZE 128

#define ERR_READER_NO_RESPONSE -5000

#define SUCCESS_READER_OP 0
#define ERR_INTERNAL_UNEXPECTED -1000
#define ERR_PORT_INVALID -2000
#define ERR_PORT_OCCUPIED -2010
#define ERR_HANDLE_INVALID -2020
#define ERR_INCORRECT_PARAM -2030
#define ERR_READER_NO_TAG -3000
#define ERR_READER_OP_FAILURE -3030
#define ERR_READER_UNKNOWN -3040
#define ERR_READER_LOGIN_INVALID_STORED_KEY_FORMAT -4010
#define ERR_READER_LOGIN_FAIL -4011
#define ERR_READER_OP_AUTH_FAIL -4012
#define ERR_READER_VALUE_DEC_EMPTY -4030
#define ERR_READER_VALUE_INC_OVERFLOW -4031
#define ERR_READER_VALUE_OP_FAILURE -4032
#define ERR_READER_VALUE_INVALID_BLOCK -4033
#define ERR_READER_VALUE_ACCESS_FAILURE -4034


#define ACR110_USB1 0
#define ACR110_USB2 1
#define ACR110_USB3 2
#define ACR110_USB4 3
#define ACR110_USB5 4
#define ACR110_USB6 5
#define ACR110_USB7 6
#define ACR110_USB8 7
#define ACR110_USB9 8
#define ACR110_USB10 9
#define ACR110_USB11 10
#define ACR110_USB12 11
#define ACR110_USB13 12
#define ACR110_USB14 13
#define ACR110_USB15 14
#define ACR110_USB16 15
#define ACR110_USB17 16
#define ACR110_USB18 17
#define ACR110_USB19 18
#define ACR110_USB20 19
#define ACR110_MAX_PORTS 20
#define ACR110_VALID_PORT(p) (p >= ACR110_USB1 && p <= ACR110_USB20)
#define ACR110_INVALID_PORT(p) (p < ACR110_USB1 || p > ACR110_USB20)
//...

#define AC_MIFARE_LOGIN_KEYTYPE_A 0xAA
#define AC_MIFARE_LOGIN_KEYTYPE_B 0xBB
#define AC_MIFARE_LOGIN_KEYTYPE_DEFAULT_A 0xAD
#define AC_MIFARE_LOGIN_KEYTYPE_DEFAULT_B 0xBD
#define AC_MIFARE_LOGIN_KEYTYPE_DEFAULT_F 0xFD
#define AC_MIFARE_LOGIN_KEYTYPE_STORED_A 0xAF
#define AC_MIFARE_LOGIN_KEYTYPE_STORED_B 0xBF

#pragma pack(push, 1)
#ifdef __GNUC__
typedef struct __attribute__ ((__packed__)) struct_status
#else
typedef struct struct_status
#endif
{
// 0x00 = Type A; 0x01 = Type B; 0x03 = Type A + Type B
UINT8 MifareInterfaceType;

// Bit 0 = Mifare Light; Bit 1 = Mifare1K; Bit 2 = Mifare 4K; Bit 3 = Mifare DESFire
// Bit 4 = Mifare UltraLight; Bit 5 = JCOP30; Bit 6 = Shanghai Transport
// Bit 7 = MPCOS Combi; Bit 8 = ISO type B, Calypso
// Bit 9 ?Bit 31 = To be defined
UINT32 CardsSupported;

UINT8 CardOpMode; // 0x00 = Type A; 0x01 = Type B TAG is being processed
// 0xFF = No TAG is being processed.

UINT8 FWI; // the current FWI value (time out value)

UINT8 RFU; // To be defined

UINT16 RFU2; // to be defined
} STRUCT_STATUS;
#pragma pack(pop)

#ifdef __cplusplus
extern "C" {
#endif

//openclose
ACR110_API INT16 AC_DECL ACR110_Open(INT16 ReaderPort);
ACR110_API INT16 AC_DECL ACR110_Close(INT16 hReader);

//reader
ACR110_API INT16 AC_DECL ACR110_Reset(INT16 hReader);
ACR110_API INT16 AC_DECL ACR110_Status(INT16 hReader, UINT8 pFirmwareVersion[20], STRUCT_STATUS *pReaderStatus);
ACR110_API INT16 AC_DECL ACR110_ReadRC500Reg(INT16 hReader, UINT8 RegNo,UINT8* pValue);
ACR110_API INT16 AC_DECL ACR110_WriteRC500Reg(INT16 hReader, UINT8 RegNo, UINT8 Value);
ACR110_API INT16 AC_DECL ACR110_DirectSend(INT16 hReader, UINT8 DataLength, UINT8* pData, UINT8* pResponseDataLength, UINT8* pResponseData, UINT16 TimedOut);
ACR110_API INT16 AC_DECL ACR110_DirectReceive(INT16 hReader, UINT8 RespectedDataLength, UINT8* pReceivedDataLength, UINT8* pReceivedData, UINT16 TimedOut);
ACR110_API INT16 AC_DECL ACR110_RequestDLLVersion(UINT8* pVersionInfoLength, UINT8* pVersionInfo);
ACR110_API INT16 AC_DECL ACR110_ReadEEPROM(INT16 hReader, UINT8 RegNo, UINT8* pEEPROMData);
ACR110_API INT16 AC_DECL ACR110_WriteEEPROM(INT16 hReader, UINT8 RegNo, UINT8 EEPROMData);
ACR110_API INT16 AC_DECL ACR110_ReadUserPort(INT16 hReader, UINT8* pUserPortState);
ACR110_API INT16 AC_DECL ACR110_WriteUserPort(INT16 hReader, UINT8 UserPortState);

//card
ACR110_API INT16 AC_DECL ACR110_Select(INT16 hReader, UINT8* pResultTagType, UINT8* pResultTagLength, UINT8 pResultSN[10]);
ACR110_API INT16 AC_DECL ACR110_Login(INT16 hReader, UINT8 Sector, UINT8 KeyType, INT8 StoredNo, UINT8 pKey[6]);
ACR110_API INT16 AC_DECL ACR110_Read(INT16 hReader, UINT8 Block, UINT8 pBlockData[16]);
ACR110_API INT16 AC_DECL ACR110_ReadValue(INT16 hReader, UINT8 Block, INT32* pValueData);
ACR110_API INT16 AC_DECL ACR110_Write(INT16 hReader, UINT8 Block, UINT8 pBlockData[16]);
ACR110_API INT16 AC_DECL ACR110_WriteValue(INT16 hReader, UINT8 Block, INT32 ValueData);
ACR110_API INT16 AC_DECL ACR110_WriteMasterKey(INT16 hReader, UINT8 KeyNo, UINT8 pKey[6]);
ACR110_API INT16 AC_DECL ACR110_Inc(INT16 hReader, UINT8 Block, INT32 Value, INT32* pNewValue);
ACR110_API INT16 AC_DECL ACR110_Dec(INT16 hReader, UINT8 Block, INT32 Value, INT32* pNewValue);
ACR110_API INT16 AC_DECL ACR110_Copy(INT16 hReader, UINT8 srcBlock, UINT8 desBlock, INT32* pNewValue);
ACR110_API INT16 AC_DECL ACR110_Power(INT16 hReader, INT8 State);
ACR110_API INT16 AC_DECL ACR110_ListTags(INT16 hReader, UINT8* pNumTagFound, UINT8 pTagType[4], UINT8 pTagLength[4], UINT8 pSN[4][10]);
ACR110_API INT16 AC_DECL ACR110_MultiTagSelect(INT16 hReader, UINT8 TagLength, UINT8 SN[10], UINT8* pResultTagType, UINT8* pResultTagLength, UINT8* pResultSN);
ACR110_API INT16 AC_DECL ACR110_TxDataTelegram(INT16 hReader, UINT8 SendDataLength, UINT8* pSendData, UINT8* pReceivedDataLength, UINT8* pReceivedData);

#define ACR110_ReadRC531Reg ACR110_ReadRC500Reg
#define ACR110_WriteRC531Reg ACR110_WriteRC500Reg

//xapdu
ACR110_API INT16 AC_DECL PICC_InitBlockNumber(INT16 FrameLength);
ACR110_API INT16 AC_DECL PICC_Xch_APDU(INT16 rHandle, BOOL typeA, INT16 *xLen, UINT8 *xData, INT16 *rLen, UINT8 *rData);
ACR110_API INT16 AC_DECL PICC_RATS(INT16 rHandle, UINT8 FSDI, UINT8 *atslen, UINT8 *ats);
ACR110_API INT16 AC_DECL PICC_Deselect(INT16 rHandle, BOOL typeA);

ACR110_API INT16 AC_DECL ACR110_ReadATQB(INT16 rHandle, UINT8 *pATQB);

#ifdef __cplusplus
}
#endif

#endif
...全文
87 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧