unsigned 和各位大虾..上一帖子 http://topic.csdn.net/u/20090330/13/6f95befc-e2ff-45eb-b5eb-6f7db7a9ac32.html
已经解决了在程序中通过调用封装在dll中的类(使用接口来实现的)的问题,感谢unsigned..在本机调试正常,调用DLL也很正常。
但在没有安装delphi的PC上运行程序则出现 Exception exception in module 'UserInfoDLL.dll'的错误..始终不得其解,来问问各位是什么回事情。把代码放在http://download.csdn.net/source/1171701. 这里,希望各位帮帮我,这个是简单的测试代码.
如果没有安装fastMM,则请将两个工程代码的uses fastmm 都改为 shareMem.谢谢各位.调用dll的单元文件代码uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBClient,
  IuserInfo, StdCtrls;type
  TmyFunction=function:IuserInfoLib;  //声明一个函数类型  TForm1 = class(TForm)
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    
    UserLib:TmyFunction; 
     myHandle:Thandle;    //dll句柄
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
    myHandle:=LoadLibrary('UserInfoDLL.dll'); //载入DLL
    @UserLib:=GetProcAddress(myHandle,'CreateUserInfoLib');//获取到DLL中的函数
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
   UserLib:=nil;
   freeLibrary(myHandle); //释放
end;
//点击获取全部用户信息
procedure TForm1.Button1Click(Sender: TObject);
begin
    if Assigned(UserLib) then
        clientDataset1.Data:=UserLib.GetUserInfo; //获取全部的用户信息end;
 

解决方案 »

  1.   

    加载DLL失败,那就要看看DLL里面的实现。象这种应用最好在测试的时候不用使用动态加载而改用静态加载DLL。
      

  2.   

    我将midas.dll 拷贝到目标PC的c:\windwos\system32 中 好像就可以了..我再测试看看
      

  3.   

    已经解决了这个问题拷贝midas.dll即可。可能是我程序使用clientDataset 和DatasetProvider 的缘故。。
    看来要多了解Delphi的多层架构的开发知识..
      

  4.   

    已经解决了这个问题拷贝midas.dll即可。可能是我程序使用clientDataset 和DatasetProvider 的缘故。。
    看来要多了解Delphi的多层架构的开发知识..
      

  5.   

    不需要拷贝midas.dll,在你的程序里面uses MidasLib;  然后编译就可以了
      

  6.   


    这个我刚也搜索到了这样每个单元都要引用,似乎会增加文件的大小,我多个DLL 的话都引用每个都回增大..还是可以单独调用好点.