Registration( char* PersonAccountInfo,int TransType, char* MedType, char* ReimbFlag, char* InHosNo, char* DeptNo,char* SysDate, char* UserName, char* Prev1, char* Prev2, char* Prev3,char* DataBuffer)参数 输入/输出 参数名 长度 是否可空
PersonAccountInfo IN 个人及其帐户信息 1024 N
TransType IN 交易类型
-1 退号
1 挂号 2 N
MedType IN 医疗类别 3 N
ReimbFlag IN 结算类别 3 N
InHosNo IN 住院号 20 N
DeptNo IN 科室 20 N
SysDate IN 经办日期 N
UserName IN 操作员 10 N
Prev1 IN 预留 20 Y
Prev2 IN 预留 20 Y
Prev3 IN 预留 20 Y
DataBuffer OUT 返回信息 256用delphi调用:
implementation
function Registration(PersonAccountInfo:pchar;TransType:integer;MedType:pchar;ReimbFlag:pchar;InHosNo:pchar;DeptNo:pchar;SysDate:pchar;UserName:pchar;Prev1:pchar;Prev2:pchar;Prev3:pchar;DataBuffergh:pchar):integer;stdcall;external 'F:\收费端最新程序\DBLib.dll';
请教各位高手如何传参数?调用?
PersonAccountInfo IN 个人及其帐户信息 1024 N
TransType IN 交易类型
-1 退号
1 挂号 2 N
MedType IN 医疗类别 3 N
ReimbFlag IN 结算类别 3 N
InHosNo IN 住院号 20 N
DeptNo IN 科室 20 N
SysDate IN 经办日期 N
UserName IN 操作员 10 N
Prev1 IN 预留 20 Y
Prev2 IN 预留 20 Y
Prev3 IN 预留 20 Y
DataBuffer OUT 返回信息 256用delphi调用:
implementation
function Registration(PersonAccountInfo:pchar;TransType:integer;MedType:pchar;ReimbFlag:pchar;InHosNo:pchar;DeptNo:pchar;SysDate:pchar;UserName:pchar;Prev1:pchar;Prev2:pchar;Prev3:pchar;DataBuffergh:pchar):integer;stdcall;external 'F:\收费端最新程序\DBLib.dll';
请教各位高手如何传参数?调用?
getmem(databuffergh,1024);
begin
ghsucc:=Registration(DataBufferdk,1,'11','1','123','89','20120722','sq','','','',DataBuffergh);
这样传提示错误!
function Registration(PersonAccountInfo:pchar;TransType:integer;MedType,ReimbFlag,InHosNo,DeptNo,SysDate,UserName,Prev1,Prev2,Prev3,DataBuffergh:pchar):integer;stdcall;external 'F:\收费端最新程序\DBLib.dll';调用,这样试试:
var
ghsucc:Integer;
DataBuffergh:PChar;
begin
DataBuffergh:=strAlloc(1024);
ghsucc:=Registration(...,DataBuffergh); {前面的参数,传固定值试试}
ShowMessage(DataBuffergh); {显示结果}
strDispose(DataBuffergh);
end;
Access violation at address 1000DDFF in module 'DBLIB.dll'.Write of address 0045524C.
Access violation at address 1000DDFF in module 'DBLIB.dll'.Write of address 0045524C.
Access violation at address 1000DDFF in module 'DBLIB.dll'.Write of address 0045524C.
您能不能帮我看看哪个参数有问题?
function Registration(PersonAccountInfo:pchar;TransType:integer;MedType:pchar;ReimbFlag:pchar;InHosNo:pchar;DeptNo:pchar;SysDate:pchar;UserName:pchar;Prev1:pchar;Prev2:pchar;Prev3:pchar;DataBuffergh:pchar):integer;stdcall;external 'F:\收费端最新程序\DBLib.dll';
我传的参数:
var
getmem(databuffergh,1024);//返回信息
begin
ghsucc:=Registration(DataBufferdk,1,'11','1','123','89','20120722','sq','','','',DataBuffergh);
function Registration(PersonAccountInfo: pchar; TransType: integer; MedType,
ReimbFlag, InHosNo, DeptNo, SysDate, UserName, Prev1, Prev2, Prev3,
DataBuffergh: pchar): integer; stdcall; external 'F:\收费端最新程序\DBLib.dll';第二,“getmem(databuffergh,1024);//返回信息”是个分配内存的语句,不能放在var与begin之间;第三,9楼的讲法有欠周全。当函数原型与调用处,在stdcall、cdecl(如果是delphi写的DLL,没注明其中一个,则等同是cdecl)这问题上不一致,刚好就出那个提示。请分别使用stdcall、cdecl形式来调用试试。
其实这个问题根本不是cdecl和stdcall的区别,因为这个在测试的过程中根据参数有没有变化,直接就能选择正确的方式。实在不行两个都试试呗。
其实解决方法很简单:就是所有参数都传地址!!!
哈哈,再次感觉各位的帮助!