library functiondll;{ }uses
  SysUtils,
  Classes;{$R *.res}
function Myselfs(a: string):integer;stdcall;
begin
  result := strtoint(a);
end;function Myself(a: string):string;stdcall;
begin
  result := a;
end;
 exports Myselfs,Myself;
begin
end.--------------------------------------------------------------------------------
上面是DLL的源码,如下是调用.unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function Myselfs(a:string):integer;stdcall;external 'functiondll.dll';
  function Myself(a:string):string;stdcall;external 'functiondll.dll';var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.Text := inttostr(Myselfs('1')); 
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  edit1.Text := Myself('1');----------出错;
end;end.
-----------------------------------------------------------------------
问:
1,是DLL不能返回STRING值,还是调用时写错啊?
2,如果想DLL返回来STRING,怎解决啊?

解决方案 »

  1.   

    uses ShareMem即可最好的方法还是自己分配/释放PChar,这种方法最通用~~~
      

  2.   

    http://aiirii.mblogger.cn/posts/12450.aspx
      

  3.   

    ehom(?!) :按你的做法.
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      edit1.Text := inttostr(Myselfs('1')); 
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      edit1.Text := Myself('1');
    end;
    -------------------------------------------------
    以上的没有问题,但在退出程序时,就出现异常,runtime错误.
    可以再给指点吗?
      

  4.   

    你在那添加的?在调用该DLL的工程项目文件,dpr文件~~~因为不推荐这么做,所以没细说.使用PChar才是王道
      

  5.   

    使用ShareMem,分发时就必须带上BorlandMM
      

  6.   

    在调用该DLL的工程项目文件,dpr文件~~~
    同一样的错误.
      

  7.   

    那就不知道你还犯了什么错误~~~不过仍然建议你放弃String,PChar才是你该用的.否则无法保证该DLL的通用性~~~
      

  8.   

    先谢过,用Pchar可以解决问题.但有点不明白:
    即使在没有调用DLL的项目文件.dpr文件加了ShareMem
    退出程序时也会发生异常啊.
      

  9.   

    ShareMem要放第一个
    可以了.
    谢谢你.先去看看ShareMem