在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程式已經寫好了,不能夠在修改,只能修改動態庫,請問各位大俠,就是不修改結構體的順序,有什么辦法解決嗎?
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
自己去數一下位元組對應,C的int默認為4個位元組PB的為2個位元組,C的char陣列的定義尾部一般要多定義一個用來存放\0的結束符,而PB自己會帶上這個,所以對應于C的char serial[16+1],PB里面定義一個char serial[16]就可以了轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34775.html
標籤:API 調用
