也就不可以直接返回字符串了?

解决方案 »

  1.   

    楼主什么意思,dll中的string要用pchar代替,你指的什么不能返回
      

  2.   

    返回值不对啊dll或者类中
    function a:pchar;
    begin
    result:=pchar('dfsfds');
    end;这个有什么问题呢?
      

  3.   


    function A:PChar;
    begin
     StrPcopy(Result,'dfsfds');
    end;
      

  4.   

    StrPcopy,将字符串拷贝到Pchar变量中
      

  5.   

    我觉得这么用的话编译器应该会给你个Result还没初始化的警告吧,往野指针里写内容保证死得很惨
      

  6.   

    PChar只是一个指针而已你可以在参数里传递一个已分配内存的PChar指针
    通过参数返回 大多数winapi都是这么做的。
      

  7.   

    代码没法帖,反正多次出现过类似的现象
    如果  
    edit.text是  你好一
    result:=pchar(edit.text);那么经过顺序调用后(或者再转换为string)
    显示基本按下面的顺序显示
    你好  (调试信息为 '你好'#0)
    你好一(调试信息为 '你好一')
    你好 (调试信息为 '你好'#0)
    你好一(调试信息为 '你好一')
      

  8.   

    delphi中的string的生存期是由rtl管理的,在使用PChar的时候,string的引用计数不会增加。当生存期结束的时候string指向的内存就被释放了,这时候再去引用它的地址,会发生什么行为都是未知的。一般来说,除了直接接收返回值的调用过程对PChar内容的访问是预期的外,其它地方再次引用该PChar都是不安全的。
    如果想保证它的内容不变化,有两个比较简单的办法,一个是给PChar申请一块空间,把string内容复制进来。另外一种是手动把string的引用计数改为-1,这样rtl会认为它是个常量而不会试图去释放它。由于后者会涉及复杂的手动管理,加上WideString没有引用计数,所以我不推荐后者,也就不说怎么改它的引用计数了。
      

  9.   

    用局部存储空间作返回值会出错。
    你用PChar出错了,并不代表PChar不能做返回值类型。
      

  10.   

    你让PChar指向一个全局的 array [...] of char, 做返回值试试