怎样在DLL的函数中返回记录类型的数据?怎样定义?在调用的那边又是怎样定义和调用?请给我示例!

解决方案 »

  1.   

    //主程序的代码
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, 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;
      jk_handle:Thandle;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      jk:procedure (cs:string);stdcall;
         // 传递参数:cs
    begin
      jk_handle:=loadlibrary(pchar('test'));// 加载test.dll
      if jk_handle<=0 then // 不存在DLL
      begin
        Application.messagebox('动态链接库加载失败!','提示',64);
        FreeLibrary(jk_handle);
        exit;
      end
      else // 存在DLL
      begin
        try
          @jk:=GetprocAddress(jk_handle,'jk_cscd');
          jk('传递的参数');
          FreeLibrary(jk_handle);
        except
          Application.messagebox('动态链接库加载失败!','提示',64);
          exit;
        end; // end of except
      end;end;end.
    ///////////////////////////
    test.dll的代码工程代码
    library xt_klxg;uses
      Forms,
      unit1 in 'u_main_klxg.pas';{$R *.RES}exports
      jk_cscd; // 参数传递beginend.Form1代码
    unit u_main_klxg;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls, ADODB, DB;type
      TForm1 = class(TForm)
        
      private
        { Private declarations }
      public
        p_cs;
        { Public declarations }
      end;var
      f_main_klxg: Tf_main_klxg;
      procedure jk_create;
      procedure jk_free;
      procedure jk_cscd(cs:string);stdcall; // 参数传递implementationuses u_dm;{$R *.DFM}procedure jk_create;
    begin
      Application.CreateForm(TForm1,Form1);
    end;procedure jk_free;
    begin
      if assigned(Form1) then Form1.free;
    end;procedure jk_cscd(cs:String);stdcall;
    begin
      try
        jk_create;  
        Form1.p_cs:=cs;    
        Form1.ShowModal;
      finally
        jk_free;
      end;
    end;procedure Tf_main_klxg.Button1Click(Sender: TObject);
    begin
      ShowMessage('p_cs');
    end;end.
      

  2.   

    可以使用参数返回注意:不要使用var,在Dll中最好不要用stdcall直接些就可以了 
    如:(dll中)
    type TA = record
      a: integer;
      b: word;
    end;procedure test(a: TA); export;调用跟一般函数调用是一样的。
      

  3.   

    在这个贴子
    http://expert.csdn.net/Expert/topic/1394/1394209.xml?temp=.9534113不是已经回答了吗?