此问题是 接口调用对方程序的 DLL 文件代码一执行到这里
sucess := ExpenseCalc(YJtype, chr_lb
,pchar(rq)
,pchar(cb_name)
,pchar(xulh)
,pchar(card)
,pchar(invono)
,AppCode,DataBuffer);
就提示 external exception c0000008 这个错误
第一部分是 对方DLL 文件 函数的原型
第二部分是我声明的函数 和过程 问题是代码一运行到下面是对方DLL函数原型Syntax:
Int ExpenseCalc(int TransKind,
int MedKind,
char* SysDate,
char* UserName,
char* BillNo,
char* MedCardNo,
char* InHosNo,
int* AppCode,
char* DataBuffer)Delphi(Pascal) code
Function ExpenseCalc(TransKind, MedKind : Integer; SysDate,UserName,BillNo, MedCardNo, InHosNo :Pchar;
AppCode:PInteger;DataBuffer :Pchar):Integer;export;stdcall;far;external DllName name 'ExpenseCalc';procedure TFrmmin.GetYBExpenseCalc(YJtype,yb_lb: integer; HeadInfo: TTable; var sucess: Integer; var omt_msg: wideString);
var
DataBuffer :pchar;
AppCode :PInteger;
s_str :String;
chr_lb : integer;
rq ,cb_name,xulh,card,invono :String;begin
try
if yb_lb=0 then chr_lb :=1
else chr_lb :=3;
sucess := -1;
GetMem(DataBuffer,8000);
GetMem(AppCode,8);
try //
rq := formatdatetime('yyyymmddhhnnss',now);
cb_name := HeadInfo.FieldByName('CB_NAME').AsString;
xulh := HeadInfo.FieldByName('XULH').AsString ;
card := HeadInfo.FieldByName('IC_CARD').AsString;
invono := HeadInfo.FieldByName('InvoiceNo').AsString;
sucess := ExpenseCalc(YJtype, chr_lb
,pchar(rq)
,pchar(cb_name)
,pchar(xulh)
,pchar(card)
,pchar(invono)
,AppCode,DataBuffer); if sucess =-1 then
begin
omt_msg := inttostr(AppCode^)+ strpas(DataBuffer) ;
DM_POS.InsertLogREcord(DM_POS.CHeadInfo.FieldByName('DKTID').asstring ,
DM_POS.CHeadInfo.FieldByName('xulh').asstring ,
'结获取信息',
strpas(DataBuffer) ,
'ExpenseCalc',
DM_POS.CHeadInfo.FieldByName('RIQI').asstring );
end
else omt_msg := inttostr(AppCode^)+ strpas(DataBuffer);
except
omt_msg := '失败,请检查网络是否正常!:'+ strpas(DataBuffer); end;
finally
FreeMem(DataBuffer,8000);
FreeMem(AppCode,8);
endend;
sucess := ExpenseCalc(YJtype, chr_lb
,pchar(rq)
,pchar(cb_name)
,pchar(xulh)
,pchar(card)
,pchar(invono)
,AppCode,DataBuffer);
就提示 external exception c0000008 这个错误
第一部分是 对方DLL 文件 函数的原型
第二部分是我声明的函数 和过程 问题是代码一运行到下面是对方DLL函数原型Syntax:
Int ExpenseCalc(int TransKind,
int MedKind,
char* SysDate,
char* UserName,
char* BillNo,
char* MedCardNo,
char* InHosNo,
int* AppCode,
char* DataBuffer)Delphi(Pascal) code
Function ExpenseCalc(TransKind, MedKind : Integer; SysDate,UserName,BillNo, MedCardNo, InHosNo :Pchar;
AppCode:PInteger;DataBuffer :Pchar):Integer;export;stdcall;far;external DllName name 'ExpenseCalc';procedure TFrmmin.GetYBExpenseCalc(YJtype,yb_lb: integer; HeadInfo: TTable; var sucess: Integer; var omt_msg: wideString);
var
DataBuffer :pchar;
AppCode :PInteger;
s_str :String;
chr_lb : integer;
rq ,cb_name,xulh,card,invono :String;begin
try
if yb_lb=0 then chr_lb :=1
else chr_lb :=3;
sucess := -1;
GetMem(DataBuffer,8000);
GetMem(AppCode,8);
try //
rq := formatdatetime('yyyymmddhhnnss',now);
cb_name := HeadInfo.FieldByName('CB_NAME').AsString;
xulh := HeadInfo.FieldByName('XULH').AsString ;
card := HeadInfo.FieldByName('IC_CARD').AsString;
invono := HeadInfo.FieldByName('InvoiceNo').AsString;
sucess := ExpenseCalc(YJtype, chr_lb
,pchar(rq)
,pchar(cb_name)
,pchar(xulh)
,pchar(card)
,pchar(invono)
,AppCode,DataBuffer); if sucess =-1 then
begin
omt_msg := inttostr(AppCode^)+ strpas(DataBuffer) ;
DM_POS.InsertLogREcord(DM_POS.CHeadInfo.FieldByName('DKTID').asstring ,
DM_POS.CHeadInfo.FieldByName('xulh').asstring ,
'结获取信息',
strpas(DataBuffer) ,
'ExpenseCalc',
DM_POS.CHeadInfo.FieldByName('RIQI').asstring );
end
else omt_msg := inttostr(AppCode^)+ strpas(DataBuffer);
except
omt_msg := '失败,请检查网络是否正常!:'+ strpas(DataBuffer); end;
finally
FreeMem(DataBuffer,8000);
FreeMem(AppCode,8);
endend;
解决方案 »
- 请大侠出手将下列VC++语句转换为Delphi语句,奉送所有分数!
- SOCKET,请高手指点,如果知道接受到服务端数据!!!!
- 为什么同样的设置却只有一个ClientDataSet能够更新数据?
- 高分求教delphi读取 outlook express 通讯簿记录的代码
- 如何使用TreeView
- olecontainer嵌入word,如何读取选中的合并单元格的行列信息?
- TSession控件的NetFileDir属性和PrivateDir属性
- 如何正确的在ACCSEE数据库中添加记录?
- 这段代码那里错了?我怎么得不到结果呀?
- 错在那
- 程序连ODBC数据源 的问题 非常着急 在线等
- delphi 中价格区间的查询
这俩我去掉过 去掉了 就开始报我那 动态库的 错了