谁帮忙把下面的C语言结构怎样改写为delphi结构(50分)

  • 主题发起人 主题发起人 gj123root
  • 开始时间 开始时间
G

gj123root

Unregistered / Unconfirmed
GUEST, unregistred user!
int __stdcall IReadCard(LhHisRecInsureCard aInsureCard,char *sCard,int bReadType)
功能:读参保人员就医卡信息时调用
参数:
传入:bReadType-0,门诊读卡,1,住院读卡
传出:aInsureCard,结构,就医卡信息
sCard,字符串,就医卡附加信息
调用:读卡时调用
返回:0-成功,否则失败

其中,
typedef struct  {刷卡信息}
{
char* insure_card_no
//"医保卡号&quot

char* insure_no;// "医保号&quot

char* id_card_no;// "身份证号&quot

char* insure_type;// "待遇码&quot

char* r_date;// "发卡日期&quot

char* insure_mask;// "当前标志&quot

char* p_acct_cost;// "个人账户余额&quot

char* p_pay_cost;// "自付段余额&quot

char* insure_payed;// "前已发生额&quot

char* last_date;// "最后就医日期&quot

char* last_hosptial;// "最后结算单位&quot

char* getsure_unit_name;// "承保单位名称&quot

char* acct_today;// "今日发生额&quot

char* cur_year;// "有效年度&quot

char* last_hospital_level;// "最后就医医院级别&quot

char* mk_sum;// "发生总计&quot

char* last_go;// "上年结转&quot

char* per_in;// "本年个人账户划入&quot

char* per_in_get;// "个人账户实际划入额&quot

char* pay_in;// "自付段限额&quot

char* insure_name;// "参保人姓名&quot

char* insure_sex;// "参保人性别&quot

char* insure_outtype;// "出险待遇&quot

char* insure_birth;// "生日&quot

char* insure_add_date;// "参保日期&quot

char* unit_name;// "投保单位名称&quot

char* insure_vol;// "投保险种&quot

char* timeh
//"本年住院次数&quot

}*LhHisRecInsureCard


我曾做这样的改写:

type
TLhHisRecInsureCard=Record
insure_card_no :pchar
//"医保卡号&quot

insure_no :pchar
// "医保号&quot

...
end


function IReadCard(var aInsureCard :TLhHisRecInsureCard;var Cardchar;bReadType:integer):integer
stdcall


调用却总是失败!aInsureCard 参数不能得到返回值
 
type
TLhHisRecInsureCard= ^CardRecord;
CardRecord = Record
insure_card_no :pchar
//"医保卡号&quot

insure_no :pchar
// "医保号&quot

...
end;
 
试试这样:
type
PLhHisRecInsureCard=^TLhHisRecInsureCard;
TLhHisRecInsureCard=Record
insure_card_no :pchar
//"医保卡号&quot

insure_no :pchar
// "医保号&quot

...
end

function IReadCard(var aInsureCard :PLhHisRecInsureCard;var Cardchar;bReadType:integer):integer
stdcall;
 
调用 IReadCard这个函数时 LhHisRecInsureCard 什么都没有
用aInsureCard.insure_card_no:=AllocMem(50)
//医保卡号
进行初始化后insure_no,acct_today返回了值,其它的都没有,且acct_today的值不对,是后面的错位了insure_no没有错位
 
我写的程序很臭的,明白人一看就看出来了

还有一种方法,就是不用VCL改用其他一些组件库,我记得以前有个叫KOL什么的,舍弃了庞大的VCL,编译出来的文件也可以变小,不过功能以及扩展性就不敢说了。临时编个小程序还可以
 
1. 根据上面的资料, Delphi调用的格式(方式)应该是这样的:
function IReadCard(CardInfo, CardInfo_add : pchar
bReadType : integer) : integer
stdcall;

2. 调用前, 先准备好CardInfo, CardInfo_add;
调用后, 再自己理解CardInfo和CardInfo_add中的内容;

3. Delphi不能直接使用类似上面C++的字符指针的结构(其实上面也是很蹩脚的C++程序员的通信协议), Delphi可以从CardInfo中自己分解出所需信息, 每个单项字符串之间均以ASCII码00格开;
 
:to 新世纪
function IReadCard(CardInfo, CardInfo_add : pchar
bReadType : integer) : integer
stdcall;

CardInfo怎么准备为c的LhHisRecInsureCard结构呢?
 
1. 自己重新定义LhHisRecInsureCard的结构, 例如:
type TLhHisRecInsureCard = record
card_no : integer
// 或者 card_no : string[20];
insure_no: integer
// 或者 string[20];
....
2. CardInfo的定义是一个Buffer, 例如:
var CardInfo : array[1..10240] of char
// 足够大, 保证全部接收信息;

3. 自己从CardInfo中获取相关信息, 各字段信息之间应该是以0x00字节分开的;

4. 再不要问我了, 再问我就等于要我帮你写程序了
 
补充一下:
调用时作如下调用:
var
aInsureCard:TLhHisRecInsureCard;

...
//分配空间
aInsureCard.insure_card_no:=AllocMem(50)
//医保卡号
aInsureCard.insure_no:=AllocMem(50)
//医保号
...
iReturn:=IReadCard(aInsureCard,sCard,bReadType);
//下面获取从aInsureCard参数带出来的信息,只有insure_no,acct_today返回了值,
//其它的都没有,且acct_today的值不对:后面的错位了,insure_no没有错位。
 
后退
顶部