这是我在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定义的函数不能改变参数的值吗?我想应该能吧,请问要怎么改了?不是用返回值来达到目的.

解决方案 »

  1.   

    str1="BBBBB";将上面改为:strcpy(str1,"BBBBB");
      

  2.   

    那样也没有用呀,我的值在函数里已经付给了STR1了呀
      

  3.   

    如果没有改变STR1的值的话也不会有输出BBBB的对话框出现呀!
      

  4.   

    str1="BBBBB";
    这样会将原指针丢掉,幸好str1是函数的形参。编绎器已将str1保护,自然在函数内显示正确。只有采用内存拷贝方式,才能修改str1中值,或者采用双重指针也行。