delphi 写的dll文件的调用问题.

silicon_crystal 2003-09-24 10:08:24
我在vfp中调用一个delphi写的dll文件.
其代码如下

PROCEDURE firstdata
PUBLIC CBUFF , RESUU
*--以下是调用dll的声明,函数为GS_MHDog,dll文件为win32dll.dll
DECLARE INTEGER GS_MHDog IN win32dll STRING @
*--初始化变量
CBUFF = SPACE(256)
CH1 = CHR(4)
CH2 = CHR(0)
CBUFF = STUFFC(CBUFF,1,1,CH1)
CBUFF = STUFFC(CBUFF,2,1,CH2)
CBUFF = STUFFC(CBUFF,3,1,CH2)
CBUFF = STUFFC(CBUFF,4,1,CH2)
CH1 = CHR(10)
CBUFF = STUFFC(CBUFF,5,1,CH1)
CBUFF = STUFFC(CBUFF,6,1,CH2)
CBUFF = STUFFC(CBUFF,9,1,CH2)
CBUFF = STUFFC(CBUFF,10,1,CH2)
CBUFF = STUFFC(CBUFF,11,1,CH2)
CBUFF = STUFFC(CBUFF,12,1,CH2)
STR1 = 'NcdJ'
CBUFF = STUFF(CBUFF,17,20,STR1)
ENDPROC
*------
PROCEDURE checkdata
*---调用dll中的函数
RESUU = GS_MHDOG(@CBUFF)
messgebox(cbuff)
ENDPROC
*------


delphi写的dll代码如下

library win32dll;
uses
ShareMem,Messages,windows,
Dialogs,SysUtils,Classes;
//vfp调用的函数
function GS_MHDog(str_mh:pchar):integer;cdecl;
begin
showmessage('dll原始:'+str_mh);
str_mh:='adfkjaf';
showmessage('dll修改后返回前'+str_mh);
Result:=0;
end;
exports
GS_MHDog;
begin
end.


现在的问题是我在vfp收到的值无论怎么做也没有办法改变
也就是在vfp中虽然是传送的指针,但我在dll中对起内容的改变是没有效果的.没有用,
还在vfp退出的时候报个内存读写错误.
谁知道这是什么原因吗.

以下是我已经在delphi中尝试过的方法.
function GS_MHDog(str_mh:pchar):integer;cdecl;
function GS_MHDog(str_mh:pchar):integer;stdcall;
以上两个声明能调用,但不能改变cbuff的内容.
function GS_MHDog(var str_mh:pchar):integer;stdcall;
vfp报参数错误.

但如果这个dll改用cb来写就没有任何问题.
各位帮帮忙看看症结在什么地方.

问题二'
同样是那个dll文件
如果要在delphi程序中调用.如果想要在dll改变pchar的内容.则要求声明为
function GS_MHDog(var str_mh:pchar):integer;stdcall;
才可以.这是什么道理.
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
silicon_crystal 2003-09-24
  • 打赏
  • 举报
回复
不能加上var后,vfp报参数声明有问题.没办法执行.
jerrymousenet2 2003-09-24
  • 打赏
  • 举报
回复
RESUU = GS_MHDOG(CBUFF)
function GS_MHDog(var str_mh:pchar):integer;stdcall;
用这两上试试看。
jerrymousenet2 2003-09-24
  • 打赏
  • 举报
回复
在delphi中未加参数前未加var表示传值,加了var才是传引用。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧