动态调用方式
程序中定义了一个ShowCalendar函数,返回在这个窗体中设定的日期。函数定义如下:
function ShowCalendar(AHandle: THandle; ACaption: String): TDateTime;
var
DLLForm: TDLLForm;
begin
Application.Handle := AHandle;
DLLForm := TDLLForm.Create(Application); //创建并显示窗体
try
DLLForm.Caption := ACaption;
DLLForm.ShowModal; //显示方式为模式化
Result := DLLForm.calDLLCalendar.CalendarDate; //返回设定日期
finally
DLLForm.Free; //用完后卸载该窗体
end;
end;
在DLL的工程文件中用exports ShowCalendar; 语句引出该函数。下面通过一个简单的应用程序测试一下该DLL文件。新建一个工程文件,在窗体中放置一个Label控件和一个按钮控件,在按钮控件的OnClick事件中编写如下代码:
procedure TMainForm.Button1Click(Sender: TObject);
var
OneHandle : THandle; //定义一个句柄变量
begin
OneHandle := LoadLibrary('Clendar.dll'); //动态载入DLL,并返回其句柄
try
if OneHandle <> 0 then //如果载入成功则获取ShowCalendar函数的地址
@ShowCalendar := GetProcAddress(OneHandle, 'ShowCalendar');
if not (@ShowCalendar = nil) then
//如果找到该函数则在主窗体的Label1中显示DLL窗体中设定的日期
Label1.Caption := DateToStr(ShowCalendar(Application.Handle, Caption))
else
RaiseLastWin32Error;
finally
FreeLibrary(OneHandle); //调用完毕收回DLL占用的资源
end;
end;
@ShowCalendar 是怎样定义的
怎样在主程序中调用dll中的函数?
程序中定义了一个ShowCalendar函数,返回在这个窗体中设定的日期。函数定义如下:
function ShowCalendar(AHandle: THandle; ACaption: String): TDateTime;
var
DLLForm: TDLLForm;
begin
Application.Handle := AHandle;
DLLForm := TDLLForm.Create(Application); //创建并显示窗体
try
DLLForm.Caption := ACaption;
DLLForm.ShowModal; //显示方式为模式化
Result := DLLForm.calDLLCalendar.CalendarDate; //返回设定日期
finally
DLLForm.Free; //用完后卸载该窗体
end;
end;
在DLL的工程文件中用exports ShowCalendar; 语句引出该函数。下面通过一个简单的应用程序测试一下该DLL文件。新建一个工程文件,在窗体中放置一个Label控件和一个按钮控件,在按钮控件的OnClick事件中编写如下代码:
procedure TMainForm.Button1Click(Sender: TObject);
var
OneHandle : THandle; //定义一个句柄变量
begin
OneHandle := LoadLibrary('Clendar.dll'); //动态载入DLL,并返回其句柄
try
if OneHandle <> 0 then //如果载入成功则获取ShowCalendar函数的地址
@ShowCalendar := GetProcAddress(OneHandle, 'ShowCalendar');
if not (@ShowCalendar = nil) then
//如果找到该函数则在主窗体的Label1中显示DLL窗体中设定的日期
Label1.Caption := DateToStr(ShowCalendar(Application.Handle, Caption))
else
RaiseLastWin32Error;
finally
FreeLibrary(OneHandle); //调用完毕收回DLL占用的资源
end;
end;
@ShowCalendar 是怎样定义的
怎样在主程序中调用dll中的函数?
解决方案 »
- ttable1.edit;该语句后如何取消edit模式
- 求助,delphi中点击treeview的节点,如何保持它高亮的颜色
- 使用cxGrid时删除adodataset最后一条记录时出错"bof 或eof中有一个是真,或者当前的记录已被删除..."
- 为何SOCKET接收到PCHAR类型数据无法读取?
- 请教在三层程序中显示多个表的数据,而只更新一个表的数据的问题!!!
- 有关多层服务端
- 运用ADOTabel时遇到的问题?
- 这样的两个label,如何获得对方的标题?
- 有个不知道算不算难的问题想问问各位高手!
- 可用分如何增加
- 如何在DBgrid中实现字段数据的下拉提示效果?
- 在此论坛中发贴怎么上传图片呀?
你也可以自己在主程序中定義一個函數變量(和dll中的一樣的參數和返回值)
;
怎樣調用?就是你的代碼呀!
不過最好吧dll放到你的主程序的目錄下面
TShowCalendar = function (AHandle: THandle; ACaption: String): TDateTime;
var
ShowCalendar: TShowCalendar;
要在主程序與dll都要 uses ShareMem