delphi如何接收VC写的DLL里的形参的值?(50分)

  • 主题发起人 主题发起人 euzen
  • 开始时间 开始时间
E

euzen

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个用VC写的DLL,里面有函数testfunc()<br>如int testfunc(CString *parm1,CString parm2);<br>parm1和parm2都是字符串型的,这两个值会在函数里改变,我要在DELPHI里调用testfunc(),<br>如何才能得到parm1及parm2的值?<br>我尝试过用形参使用shortstring,array of char,pchar 都不行,<br>而且在VC里的类型也换过char数组等,都不能取得parm的返回值.<br>不知道要跟VC里的何种类型作对应,请指教.
 
dephi里面没有指针类型,cstring *parm1 可能不好附值,期待大侠解答
 
在VC的DLL中int testfunc(CString *parm1,CString parm2);参数改成<br>char*
 
用function testfunc(parm1, parm2: PChar): Integer; stdcall来在Delphi中说明函数
 
试过你们所说的,都还是不行,<br><br>在DELPHI里我用function testfunc(var parm1,parm2:PChar):integer;stdcall来说明,<br>在DLL里的函数可以接收来收DELPHI传过来的字符串,但当我在DLL函数里改变了parm的值时,<br>DELPHI里并不能取得此值!
 
你要改你的VC代码,CString是VC封装过的数据类型,Delphi怎么拿得到.
 
不用要说VC了,我试了一下用DELPHI自己写一个DLL,<br>testfunc(var parm1:shortstring,var parm2:shortstring)<br><br>在另一个DELPHI程序里调用这个DLL里的函数,也不用传回parm1,parm2的值!
 
当你在DLL函数里改变了parm的值时,系统内存管理另外生成一个字符串。Parm是一个字符串<br>的指针,还是指向原来的字符串,所以Delphi不知道。你可以把现在的字符串指针作为函数<br>返回值。<br>Dll中用VC申明为: CString * testfunc(CString *parm1,CString parm2);stdcall;<br>Delphi中申明为:function testfunc(var parm1,parm2:PChar):PChar;stdcall;<br><br>
 
多谢jiangxiancheng,的意见,因为这个DLL是开发给外单位用的,返回值方面早有定义,<br>只能是返回int型的.如果你说的是实际情况的话,那不说是没有办法了?<br>奇怪的是,这个VC的函数,在PB里就用得好正常,可以取得形参的值,看来都还是DELPHI的问题.<br>难怪,DELPHI6的帮助里,对形参作说明时,都只是用integer来说明,没有涉及字符型的.
 
我不太明白你的意思,为什么在C中改变字符串,而Delphi又要知道修改后的值。
 
faint,都和你说了,把VC DLL的接口函数参数类型改掉,用char*. 我原来解VC的硬件驱动<br>都是用这个东东,以DLL形式发布,别的部门用Delphi或别的语言调用.
 
to;jiangxiancheng<br>因为函数只有一个返回值呀,所以难对在形参里得到多个返回值啦.<br><br>这次要真的要多谢bluerain了!虽然我不是用char *,是用了CString *,之前你说CString经过<br>封装,但我试了,DELPHI还是可以得到它的值的.<br><br>我这样定义就可以了..<br>C:<br>extern "C" int _stdcall testfunc(CString *parm1,CString *parm2)<br>Delphi:<br>function testfunc(var parm1,parm2:PChar):integer;stdcall;far;
 
后退
顶部