读书人

delphi 调用 c++ 开发的dll 有关问题。

发布时间: 2012-02-17 17:50:41 作者: rapoo

delphi 调用 c++ 开发的dll 问题。。。。。难啦兄弟们好长时间都没解决了。。。。。。。。。
C++ DLL 申明部分:

ryxx
extern "C" BOOL PASCAL EXPORT ryxx(LPSTR ybjgbm,LPSTR yybm,
LPSTR sfz,LPSTR xm,LPSTR yllb,LPSTR ryfs,LPSTR sj,
LPSTR zyh,LPSTR zz,LPSTR ks,LPSTR ch,LPSTR sgfssj,
strlpout & out)

delphi 调用部分:

Type
str_out=record 为一个31个字符串的结构

Type
str_out=record
errtext :Pchar;
out1 :Pchar;
out2 :Pchar;
out3 :Pchar;
out4 :Pchar;
out5 :Pchar;
out6 :Pchar;
out7 :Pchar;
out8 :Pchar;
out9 :Pchar;
out10 :Pchar;
out11 :Pchar;
out12 :Pchar;
out13 :Pchar;
out14 :Pchar;
out15 :Pchar;
out16 :Pchar;
out17 :Pchar;
out18 :Pchar;
out19 :Pchar;
out20 :Pchar;
out21 :Pchar;
out22 :Pchar;
out23 :Pchar;
out24 :Pchar;
out25 :Pchar;
out26 :Pchar;
out27 :Pchar;
out28 :Pchar;
out29 :Pchar;
out30 :Pchar;
End;


var
Form1: TForm1;

implementation

{$R *.dfm}
function ryxx(ybjgbm:pchar;yybm:pchar;sfz:pchar;xm:pchar;yllb:pchar;ryfs:pchar;sj:pchar;zyh:pchar;zz:pchar;ks:pchar;ch:pchar;sgfssj:pchar;strout:str_out):boolean;pascal; external 'd:\CxybClient.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
strout:str_out;
begin
//----------------------------------调用
if ryxx('sss','sssd','dsf','we','werd','qwer','ccc','ddd','dfw','werx','erg','ggg',strout) then
begin
end;
//----------------------------------结束

end;

调用出错提示:

Access violation at address 10001832 in module 'CxybClient.dll'. Read of address 00737373

[解决办法]
申明不对。改为:
function ryxx(ybjgbm:Pchar;yybm:Pchar;sfz:Pchar;xm:Pchar;yllb:Pchar;ryfs:Pchar;sj:Pchar;zyh:Pchar;zz:Pchar;ks:Pchar;ch:Pchar;sgfssj:pchar; var strout:str_out):boolean; stdcall; external 'd:\CxybClient.dll';

读书人网 >.NET

热点推荐