• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

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;
才可以.这是什么道理.
...全文
28 点赞 收藏 3
写回复
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才是传引用。
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1463

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告