不能传递string类型的参数,除非使用一个什么单元,才可以传递。用Pchar类型,并请详细告知出错的信息。

解决方案 »

  1.   

    改成这样试试:
    procedure createbutton(t:tform;b:tbutton;bcaption:string);
    var
      btn:Tbutton;
    begin
        btn:=tbutton.create(t);
        btn.parent:=t;
        btn.caption:=bcaption;
        b:=btn;
    end;
      

  2.   

    不能传递string类型的参数,除非使用一个什么单元,才可以传递。用Pchar类型,并请详细告知出错的信息。
      

  3.   

    如果dll的导出函数有string类型的参数
    dll和调用dll的程序(如果delphi编写的)
    必须要 Uses Sharemen 单元
    看看 delphi的帮助
      

  4.   

    请问:
    那么,在源程序中如何使用
    procedure createbutton(t:tform;b:tbutton;bcaption:string)
    也就是如何调用?
    谢谢!
      

  5.   

    createbutton name 'cbutton';
      

  6.   

    jrjcz ()  ,你的代码有两处错误:
    ********************************
    第一:
         uses
            SysUtils,
            Classes,
            Forms,
            StdCtrls;
    第二:
         createbutton name 'cbutton';
    ************************************欢呼吧!!!
      

  7.   

    請改成这样试试:
    library cbutton;
    uses
      SysUtils,
      Classes;
    {$R *.res}procedure createbutton(t:tform;b:tbutton;bcaption:string);export
    begin
        b:=tbutton.create(t);
        b.parent:=t;
        b.caption:=bcaption;
    end;exportscreatebutton name 'cbutton';begin
    end.
      

  8.   

    var
      form1: tform;
      button1: tbutton;
    begin
      form1 := tform.create(application);
      createbutton(form1, button1, 'you are right');
    end;
    这样做不是很好,因为到时侯不知如何释放button,
    还有要加sharemem.pas 这个单元在动态库里。
      

  9.   

    声明procedure cbutton(t:tform;b:tbutton;bcaption:string);external 'cbutton.dll';
    后,使用cbutton(form1;b;'a')时会出错,不知何故?
      

  10.   

    更正:
    cbutton(form1,b,'a')
      

  11.   

    报错信息希望能具体一点。
    Library ...
    Uses ShareMem,...Program
    Uses ShareMem,....    
    以前我也遇到过类似的情况, 但不知道你代码具体是怎么写的。给多点信息吧~!
      

  12.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure cbutton(t:tform;b:tbutton;bcaption:string);external 'cbutton.dll' name 'cbutton';
    procedure TForm1.Button1Click(Sender: TObject);
    var
    x:tbutton;
    begin
     cbutton(form1,x,'adsfg');
    end;end.
    运行时出错,不知何故?
      

  13.   

    方法一:采用Build with Run packages
    方法二:传入参数TApplication
      

  14.   

    楼上各位说的好像太复杂了!
    我认为写DLL 应该有几个原则:
    1.尽量用windows的标准类型来传递参数
    2.尽量不要用string传递字符串变量
    3.尽量用 stdcall 方式
    ...(等等)
    如果楼主写都是delphi的程序,为何要用DLL呢?:)
      

  15.   

    上面的程序运行中,b:tbutton 没有创建,不知何故?
      

  16.   

    帮忙看一下这两个帖子好吗?
    http://www.csdn.net/expert/topic/854/854793.xml?temp=.969784
    http://www.csdn.net/expert/topic/854/854793.xml?temp=.9821131