问一个引用C++写的DLL的问题(200分)

  • 主题发起人 主题发起人 netspur
  • 开始时间 开始时间
N

netspur

Unregistered / Unconfirmed
GUEST, unregistred user!
例如有个C++写的DLL,其中一个函数是这样声明的

BOOL myfunc(char *p1,
; ; ; ; ; ; int *p2,
; ; ; ; ; ; char *p3,
; ; ; ; ; ; unsigned int p4,
; ; ; ; ; ; int p5
; ; ; ; ; ; char *p6)
其中p1跟p2是传出参数,其他是传入参数,请问如何在DELPHI里面声明?怎么调用呢?
 
Function myfunc
; ; ; ; ; ;(p1:PChar,
; ; ; ; ; ; p2:Integer,
; ; ; ; ; ; p3:PChar,
; ; ; ; ; ; p4:Cardinal,
; ; ; ; ; ; p5:Integer,
; ; ; ; ; ; p6:PChar):boolean;stdcall;external 'yours.dll'

如果调用不成功请把那个DLL的声明贴上来
 
稍作改过:
Function myfunc
; ; ; ; ; ;(var p1:PChar;
; ; ; ; ; ; var p2:Integer;
; ; ; ; ; ; p3:PChar;
; ; ; ; ; ; p4:Cardinal;
; ; ; ; ; ; p5:Integer;
; ; ; ; ; ; p6:PChar):boolean;stdcall;external 'yours.dll'
 
Function myfunc
; ; ; ; ; ;(out p1:PChar;
; ; ; ; ; ; out p2:Integer;
; ; ; ; ; ; p3:PChar;
; ; ; ; ; ; p4:Cardinal;
; ; ; ; ; ; p5:Integer;
; ; ; ; ; ; p6:PChar):boolean;stdcall;external 'yours.dll'
 
请看以下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
par1,par3,par6:pchar;
par2,par5:integer;
par4:cardinal;
rs:boolean;
begin
; par3:='abc105283758';
; par6:='12345678';
; par4:=12;
; rs:=myfunc(par1,par2,par3,12,2,par6);
; if rs=true then label1.Caption :='ok';
end;

引用声明入上面的大哥所说,但是执行时候提示错误:
Acess Violation at address XXXXXXX
请问是什么原因?
 
没记错的话,C和PASCAL的逻辑类型好象是由两种类型实现的,把BOOL该成INT试试
 
Function myfunc
; ; ; ; ; ;(var p1:PChar;
; ; ; ; ; ; var p2:LongInt;
; ; ; ; ; ; p3:PChar;
; ; ; ; ; ; p4:Cardinal;
; ; ; ; ; ; p5:LongInt;
; ; ; ; ; ; p6:PChar):boolean;stdcall;external 'yours.dll'
 
hehe,pchar类型的要先分配内存的说.
只要编译没问题,就说明声明没问题
 
就是要先给pchar分配内存
 
加上:
;new(par1);
; new(par3);
; new(par6);

还是提示同一错误。
 
function myfunc(p1:PChar; //不要var
; ; ; ; ; ; var p2:integer;//这里用 p2:PInteger (没有var)也可以
; ; ; ; ; ; p3:PChar;
; ; ; ; ; ; p4:longword;
; ; ; ; ; ; p5:integer;
; ; ; ; ; ; p6:PChar):boolean;stdcall;external 'yours.dll';

不要用new初始化p1,要用GetMem指定足够的空间

注意如果c没有定义WINAPI或者stdcall,那么上面不要用stdcall,而是用cdecl
(使用cdecl还是stdcall值和c有关,虽然stdcall是导出函数的一般调用方法,但是
并不是必须的)
 
to Pipi:

多谢指点,问题解决。
同时感谢各位大虾的热心帮助。
 
多人接受答案了。
 
后退
顶部