library utf8string;uses
System;{$R *.RES}function UTF8STRS(str:pchar): pchar; stdcall;export;
begin
Result :=pchar(UTF8Encode(str));
end;exports
UTF8STRS;begin
end.
我用这段代码生成了一个dll,供其他程序调用,编译没有问题,但是调用的时候总是出现内存错误!
不知道是哪里出了问题
哪位兄弟能帮忙解决一下 

解决方案 »

  1.   

    提示
    Undeclared identifier: 'strcopy'
      

  2.   

    library utf8string;uses
    System,SysUtils,Classes;{$R *.RES}function UTF8STRS(str:pchar): pchar; stdcall;export;
    begin
    Result :=strcopy(UTF8Encode(str));
    end;exports
    UTF8STRS;begin
    end.还是不行,我修改成这样后
    [错误] utf8string.dpr(10): Incompatible types: 'UTF8String' and 'PAnsiChar'
      

  3.   

    function UTF8STRS(str:pchar): pchar; stdcall;
      

  4.   

    不好意思,我delphi刚开始学,就这样一句一句的,我实在是搞不清楚
      

  5.   

    library utf8string;uses
    System,SysUtils,Classes;{$R *.RES}function UTF8STRS(str:pchar): pchar; stdcall;
    begin
    Result :=strcopy(UTF8Encode(str));
    end;exports
    UTF8STRS;begin
    end.
    就算是改成这样也不行
      

  6.   

    function UTF8STRS(str:Pchar): pchar; stdcall;
    这样定义是有问题的,返回值占用的内存不能释放,会存在内存泄露问题。可以修改成如下函数定义:
    function UTF8STRS(source: PChar; dest: PChar): Boolean; stdcall;
    source为传入的UTF8格式字符串
    dest为转换后的字符串
    返回值为true/false这样内存都是由调用DLL的程序申请和释放的,不会存在内存泄露的问题,但是需要保证在外边申请的dest内存足够容纳转换以后的新串大小。
      

  7.   

    我调用了没出错呀function UTF8STRS(str:PChar): PChar; stdcall;external 'utf8string.dll'
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
    begin
      s:=utf8strs(PChar(Memo1.text));
      Memo1.Lines.Add(s);
    end;
      

  8.   

    验证过了,没问题啊!<?xml version="1.0" encoding="UTF-8"?>
    <School>
      <Techer>
         <Tearcher1 name = "Chen"  age="25" Height="180" />
         <Tearcher2 name = "Chen"  age="25" Height="180" />
      </Techer>
      <Dom Floor="8"/>
    </School>