Dll中的函數與一般函數一樣么﹐為什么不能夠調用???
(一)﹑Dll定義
uses
SysUtils,
ADODB,
DBGrids,
Classes;
function TitleSort(DG1:TDBGrid;Col:TColumn):String; stdcall;
var
DataSet: TDataSet;
begin
DataSet := Col.Field.DataSet;
if DataSet is TCustomADODataSet then
try
begin
with TCustomADODataSet(DataSet) do
begin
if (Pos(Col.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
Sort := Col.Field.FieldName + ' DESC'
else
Sort := Col.Field.FieldName + ' ASC';
end;
end
except
Application.MessageBox('不能對該列進行排序!','請注意:',0);
end;
end;
exports
TitleSort name 'Sort';
(二)﹑調用Dll
implementation
const
gdi32='Sort.dll';
procedure TitleSort(DG1:TDBGrid;Column:TColumn); stdcall; external gdi32 name 'Sort';
{$R *.dfm}
procedure Tform1.DBGrid2TitleClick(Column: TColumn);
begin
TitleSort(DBGrid2,Column);
end;
為什么不能夠實現函數TitleSort的功能﹐而我直接調用該函數就可以。
问题点数:20、回复次数:11Top
1 楼JerryOne()回复于 2004-12-04 20:06:29 得分 0
(一)﹑Dll定義
uses
SysUtils,
ADODB,
DBGrids,
Classes;
procedure TitleSort(DG1:TDBGrid;Col:TColumn); stdcall;
var
DataSet: TDataSet;
begin
DataSet := Col.Field.DataSet;
if DataSet is TCustomADODataSet then
try
begin
with TCustomADODataSet(DataSet) do
begin
if (Pos(Col.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
Sort := Col.Field.FieldName + ' DESC'
else
Sort := Col.Field.FieldName + ' ASC';
end;
end
except
Application.MessageBox('不能對該列進行排序!','請注意:',0);
end;
end;
exports
TitleSort name 'Sort';Top
2 楼JerryOne()回复于 2004-12-04 22:22:37 得分 0
Delphi區人還是少啊﹐這么久都沒有人Top
3 楼Blakhawk(黑鹰)回复于 2004-12-04 22:40:52 得分 7
你在调用的时候只能用在被申明的函数名,比如你在上面(主调程序)
TitleSort,并且你最好是申明的函数名称也和dll中的相同(用sort);
然后你的TitleSort返回值是string,在windows2k中可能不被支持
请使用指针来返回函数的值(非标准数据类型)。Top
4 楼prosimon(西蒙)回复于 2004-12-05 09:22:20 得分 2
帮你顶一下Top
5 楼JerryOne()回复于 2004-12-05 13:47:00 得分 0
To:Blakhawk
我在Dll申明的函数是下面的过程Top
6 楼JerryOne()回复于 2004-12-05 13:47:58 得分 0
那我的Dll中有几个被调函数有几个呢?
应该不是函数名的关系Top
7 楼JerryOne()回复于 2004-12-06 20:42:54 得分 0
Delphi 區的朋友們﹐有遇見類似問題的嗎?Top
8 楼lyBingYu(冰雨)回复于 2004-12-06 21:18:50 得分 1
这个问题不会,还得多多学习,帮你顶一下吧Top
9 楼JerryOne()回复于 2004-12-07 19:40:21 得分 0
哎﹐失望中...
自己搞定Top
10 楼moonetra(moonetra)回复于 2004-12-07 21:20:57 得分 5
难道写DLL的时候没有看到那一大段注释吗:DLL中不能用string作为返回值,应该使用PChar或者ShortStringTop
11 楼xzlinux(xz)回复于 2004-12-07 21:30:59 得分 5
同意moonetra(moonetra)的意见。
你可以在Delphi中对String和PChar的类型进行互转。Top




