我在vfp中调用一个delphi写的dll文件.
其代码如下
[code]
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
*------
[/code]delphi写的dll代码如下
[code]
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.
[/code]现在的问题是我在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;
才可以.这是什么道理.