关于DLL中函数重载的问题(分不够可以再加)

sundog 2002-09-24 04:13:37
我在DLL中写了一个重载的函数,但是在程序中调用不正常。
DLL结构如下:

unit ALAC_FillComboBox;

interface

uses
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;

implementation

procedure 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中。

各位大哥,快来帮忙呀!
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
daniel007 2002-09-27
  • 打赏
  • 举报
回复
你引用申明的时候会不会有错呢?试试使用index的方法(使用vc的depends来确定各个函数的index),而不要使用name 的方式指定,

procedure FillComboBox(ComBo:THandle ; Query1: THandle;
table: PChar; namefield: PChar);overload;stdcall external 'ALACDLL.DLL';好像是默认指定,这样好像不行。
sundog 2002-09-27
  • 打赏
  • 举报
回复
原先会出现地址错误信息的。可是加了ShareMem后就不会了。
关键的问题是在调用参数少的函数时程序会提示缺少参数,好象是没有重载成功一样。
michael_king 2002-09-25
  • 打赏
  • 举报
回复
procedure FillComboBox(ComBo:THandle ; Query1: THandle;
table: PChar; namefield: PChar);overload;stdcall external 'ALACDLL.DLL';

对象的创建要在dll中,不然,即使能运行退出时也会地址错,内存地址已经错了,这时候你不会想到是dll惹的祸
Drate 2002-09-24
  • 打赏
  • 举报
回复
unit ALAC_FillComboBox;

interface

uses
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;
这样试试看.
sundog 2002-09-24
  • 打赏
  • 举报
回复
可以呀,可以正常运行的。
GWFXP 2002-09-24
  • 打赏
  • 举报
回复
在DLL Project 文件中有没有使用
Exports
FillComboBox name 'FillComboBox';
呀?
michael_king 2002-09-24
  • 打赏
  • 举报
回复
procedure FillComboBox(ComBo: TComboBox; Query1: TQuery; table: PChar; namefield: PChar);stdcall;
dll中能声明这种procedure,不可能把,会地址错的

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧