我在DLL中写了一个重载的函数,但是在程序中调用不正常。
DLL结构如下:unit ALAC_FillComboBox;interfaceuses
  ShareMem, Windows, SysUtils, DBGrids, Math, DB, DbTables, StdCtrls;procedure FillComboBox(ComBo: TComboBox; Query1: TQuery; table: PChar; namefield: PChar);overload;stdcall;
procedure FillComboBox(ComBo: Tcombobox; Query1: TQuery; table: PChar; namefield: PChar; Desction: PChar);overload;stdcall;implementationprocedure FillComboBox(ComBo: Tcombobox; Query1: TQuery; table: PChar; namefield: PChar);
begin
...
end;procedure FillComboBoxD(ComBo: Tcombobox; Query1: TQuery; table: PChar; namefield: PChar; Desction: PChar);
begin
...
end;end.函数调用如下

procedure FillComboBox(ComBo: TComboBox; Query1: TQuery;
     table: PChar; namefield: PChar);overload;stdcall external 'ALACDLL.DLL';
procedure FillComboBox(ComBo: TComboBox; Query1: TQuery;
     table: PChar; namefield: PChar; Desction: PChar);overload;stdcall external 'ALACDLL.DLL';
运行参数多的函数没有问题,把DLL中代码原封不动的拷过来运行也没问题,但是就是不能将函数放在DLL中。各位大哥,快来帮忙呀!

解决方案 »

  1.   

    procedure FillComboBox(ComBo: TComboBox; Query1: TQuery; table: PChar; namefield: PChar);stdcall;
    dll中能声明这种procedure,不可能把,会地址错的
      

  2.   

    在DLL Project 文件中有没有使用
      Exports
        FillComboBox name 'FillComboBox';
    呀?
      

  3.   

    unit ALAC_FillComboBox;interfaceuses
      ShareMem, Windows, SysUtils, DBGrids, Math, DB, DbTables, StdCtrls;procedure FillComboBox(ComBo: TComboBox; Query1: TQuery; table: PChar; namefield: PChar);overload;//stdcall;
    procedure FillComboBox(ComBo: Tcombobox; Query1: TQuery; table: PChar; namefield: PChar; Desction: PChar);overload;//stdcall;
    这样试试看.
      

  4.   

    procedure FillComboBox(ComBo:THandle ; Query1: THandle;
         table: PChar; namefield: PChar);overload;stdcall external 'ALACDLL.DLL';对象的创建要在dll中,不然,即使能运行退出时也会地址错,内存地址已经错了,这时候你不会想到是dll惹的祸
      

  5.   

    原先会出现地址错误信息的。可是加了ShareMem后就不会了。
    关键的问题是在调用参数少的函数时程序会提示缺少参数,好象是没有重载成功一样。
      

  6.   

    你引用申明的时候会不会有错呢?试试使用index的方法(使用vc的depends来确定各个函数的index),而不要使用name 的方式指定,

    procedure FillComboBox(ComBo:THandle ; Query1: THandle;
         table: PChar; namefield: PChar);overload;stdcall external 'ALACDLL.DLL';好像是默认指定,这样好像不行。