delphi调用c的dll(100分)

  • 主题发起人 主题发起人 sunshan
  • 开始时间 开始时间
S

sunshan

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi调用c(或是vc)的dll
是用extern "C"{}来输出的
有一些已经可以正常调用了
但有的就不行,比如
int imagedecoding(Tdecodeparam *p);
其中
typedef struct tagDecodeparam
{char *inbuf;
int intbuflen;
char *outbuf;
int outbuflen;
}Tdecodeparam;
请问我在delphi里面该如何用调用的参数,比如给个形式
另外:象这样
  char abuffer[1024];
这个跟那个inbuf可以相互赋值的吗,当然是指在vc里面
那么我在delphi里面又如何定义这两种以便能相互赋值呢?
SOS!!!!!!!!!!!!!!
 
type
Tdecodeparam=record
inbuf:pchar;
intbuflen:integer;
outbuf:pchar;
outbuflen:integer;
end;

PTdecodeparam=^Tdecodeparam;

function imagedecoding(p:PTdecodeparam):integer;external dllname name '....';

如果出错,后面可以加上register、 pascal、 cdecl、 stdcall、safecall一个个试;
如果找不到函数,要注意C++中函数名不一定是定义的名称,也要加修饰符
另外:
可以inbuf=&abuffer[0];
但不可以abuffer=inbuf;要用字符串拷贝函数;
在delphi中inbuf:=@abuffer[0];


 
我用记录类型怎么不能返回值?
 
typedef struct tagDecodeparam
{char *inbuf;
int intbuflen;
char *outbuf;
int outbuflen;
}Tdecodeparam;*PTdecodeparam;
又如何?
因此问题与我想知道的问题相象,借此地问一下。
 
C编程习惯用指针返回,对指针类型的变参,实参给接受数据记录的地址就行,用@
 
本来的过程是这样的:
在vc++里面
有一个char vbuf[maxsize]
用fread从文件里面读出来给vbuf
然后将vbuf赋给decodparam->inbuf
将length of vbuf给inbuflen
然后有一个char abuf[size]
将它给decodparam->outbuf
再调用imagedecoding(&decodparam)
返回需要的outbuf内容和outbuflen的值
这个用object pascall如何声明和调用呢
我compile过了,运行也能运行但就是传不回所要的值
(我单步执行,然后view cpu看的)
象@也用的,
现在看来,我调用时候也是用的记录类型,而且是带@的,
记录里面的inbuf:=@abuf也是这样用的,
这样是不是不能带回数值来的啊?
 
inbuf:=abuf^
 
是不是用记录返回不了数值啊?????
 
老六,你的这个问题的难度可不小啊,
秋风萧萧兄的方法应该是对的,好象在函数声明的地方要加下一个
VAR吧!
 
反正这些都试过了,不行...............
 
你们说的都是对的,我也是这么干的,
但还不行,估计是他原来的问题
结束
 
后退
顶部