这是我在VC中定义的一个函数:
int Message1(char* str1)
{
MessageBox(NULL,str1,"ERROR",MB_OK);
str1="BBBBB";
MessageBox(NULL,str1,"OK",MB_OK);
return 1;
}
*.DEF中导出
EXPORTS
Message1
这是用DELPHI定义的导入函数:
var
//str1:char1024;
str1:pchar; function Message1(var str:pchar ):Integer;cdecl external 'onedll.dll' name 'Message1' ;然后用一个BUTTON显示我的参数值:
VAR
STR1:='AAAA';
i:=Message1(str1);//应该显示两次对话框,分别为AAAA和BBBB,显示对了
MESSAGEBOX(NULL,STR1,'下面显示为BBBB吗?',MB_OK);//应该显示BBBB的可是显示的还是AAAA.
请问我不是在Message1函数中不是吧STR1的值改成BBBB了,怎么后面显示的又回到了先前付的值AAAA了?DLL定义的函数不能改变参数的值吗?我想应该能吧,请问要怎么改了?不是用返回值来达到目的.
int Message1(char* str1)
{
MessageBox(NULL,str1,"ERROR",MB_OK);
str1="BBBBB";
MessageBox(NULL,str1,"OK",MB_OK);
return 1;
}
*.DEF中导出
EXPORTS
Message1
这是用DELPHI定义的导入函数:
var
//str1:char1024;
str1:pchar; function Message1(var str:pchar ):Integer;cdecl external 'onedll.dll' name 'Message1' ;然后用一个BUTTON显示我的参数值:
VAR
STR1:='AAAA';
i:=Message1(str1);//应该显示两次对话框,分别为AAAA和BBBB,显示对了
MESSAGEBOX(NULL,STR1,'下面显示为BBBB吗?',MB_OK);//应该显示BBBB的可是显示的还是AAAA.
请问我不是在Message1函数中不是吧STR1的值改成BBBB了,怎么后面显示的又回到了先前付的值AAAA了?DLL定义的函数不能改变参数的值吗?我想应该能吧,请问要怎么改了?不是用返回值来达到目的.
这样会将原指针丢掉,幸好str1是函数的形参。编绎器已将str1保护,自然在函数内显示正确。只有采用内存拷贝方式,才能修改str1中值,或者采用双重指针也行。