Python ctypes dll函数接受结构崩溃

2024-10-01 09:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在微软windows xp下访问POS终端。我使用的是python2.7。 我加载的DLL中的关键函数执行付款,它接受指向结构的两个指针,但它崩溃返回1(通信错误),但没有进一步的消息。 请注意,当调用payment函数时,并非所有POSData结构的元素都会收到值。我尝试的其他函数(GetVersion)也可以。 以下是规格和我的代码:

typedef struct
{
  char IPAddress[16]; //xxx.xxx.xxx.xxx
  int Port;
} TETHParameters;   
typedef struct
{
  char TerminalId[8+1];
  char AcquirerId[11+1];
  char TransactionType[3+1];
  char TransactionResult[2+1];
  char KODescription[24+1];
  char CardType[1+1];
  char STAN[6+1];
  char PAN[19+1];
  char AuthorizationCode[6+1];
  char OperationNumber[6+1];
  char DataTrs[7+1];
} TPOSData;

typedef struct
{
  char Amount[8+1];
  char ECRId[8+1];
  char PaymentType[1+1];
  char TerminalId[8+1];
} TECRData;

__declspec(dllexport) void IAE17_GetVersion(char *Version);
__declspec(dllexport) void IAE17_InitEth(TETHParameters *ETHParameters);

__declspec(dllexport) void IAE17_Free(void);

__declspec(dllexport) int IAE17_Payment(TECRData *ECRData, TPOSData *POSData);

^{pr2}$

Tags: 函数结构structxxxintchartypedefvoid
1条回答
网友
1楼 · 发布于 2024-10-01 09:18:57

c_char_p是C的char *的直接翻译。所以,在我看来,你的C结构

typedef struct
{
  char TerminalId[8+1];
  char AcquirerId[11+1];
  char TransactionType[3+1];

&c

你在ctypes中所说的对应的是,相反,相当于

^{pr2}$

这当然是完全不同的事情。你为什么用“指针”而不是ctypes'arrays?请不要事先澄清,谢谢!在

相关问题 更多 >