求教-PB中调用外部函数中的结构体参数问题(急急急,请高手赐教)

deng214 2015-06-29 10:56:27
在VS 2010里面定义了一个动态库结构。
typedef struct _CardInfo {
char serial[16+1];
char kind[2+1];
char kind_desc[32];
int alive;
char issuer[17];
int version;
char network[5];
char release_date[8+1];
char expired_date[8+1]; //到期日期, 年月日YYYYMMDD
char plate[13+1];
char plate_color[2+1];
char user_type[2+1];
int balance;
char balance_hex[8+1];
char on_line_hex[4+1];
char off_line_hex[4+1];
int on_line;
int off_line;
} CardInfo;
已经定义查询卡片的函数,pb里面也是按照这个结构体的写好了。

short _stdcall ReadCard(CardInfo *reply)
{
}
但是不知道为什么读出来的信息都是错位。
在pb里面调用 ret= ReadCard(CardInfo *reply)
出来的结构出现错位。


但是只要把结构体,改为整型在前面,就可以。
typedef struct _CardInfo {
int isGB;
int alive;
int balance;
int on_line;
int off_line;
char serial[16+1];
char kind[2+1];
char kind_desc[32];
char issuer[17];
char network[5];
char release_date[8+1]; //启用日期, 年月日YYYYMMDD
char expired_date[8+1]; //到期日期, 年月日YYYYMMDD
char plate[13+1];
char plate_color[2+1];
char user_type[2+1];
char balance_hex[8+1];
char on_line_hex[4+1];
char off_line_hex[4+1];
} CardInfo;

但是我们的PB程序已经写好了,不能够在修改,只能修改动态库,请问各位大侠,就是不修改结构体的顺序,有什么办法解决吗?
...全文
2825 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pb8 2015-06-30
  • 打赏
  • 举报
回复
自己去数一下字节对应,C的int默认为4个字节PB的为2个字节,C的char数组的定义尾部一般要多定义一个用来存放\0的结束符,而PB自己会带上这个,所以对应于C的char serial[16+1],PB里面定义一个char serial[16]就可以了
deng214 2015-06-29
  • 打赏
  • 举报
回复
PB调用过程 function int ReadCard(ref str_cardinfo card_info) library "test.dll" //**************************** int rtn str_cardinfo lstr_cardinfo rtn = ReadCard(lstr_cardinfo) string serialno long i_balance long i_version string kind serialno = lstr_cardinfo.s_card_serial i_balance = lstr_cardinfo.i_balance i_version = lstr_cardinfo.i_version kind = lstr_cardinfo.s_kind_desc

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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