📄 mainffm.pas
字号:
unit MainFfm;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
{ 首先定义一个过程数据类型TShowCalendar,该类型与CalendarLib.dll中输出的
函数ShowCalendar()相一致}
TShowCalendar = function (AHandle: THandle; ACaption: String): TDateTime; StdCall;
{ 声明一个特殊的异常类,当调用DLL失败时,触发该异常}
EDLLLoadError = class(Exception);
TMainForm = class(TForm)
lblDate: TLabel;
btnGetCalendar: TButton;
procedure btnGetCalendarClick(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.btnGetCalendarClick(Sender: TObject);
var
LibHandle : THandle;
ShowCalendar: TShowCalendar;
begin
{ 加载DLL }
LibHandle := LoadLibrary('CALENDARLIB.DLL');
try
{ 如果加载失败,LibHandle的值将为0,将触发一个异常}
if LibHandle = 0 then
raise EDLLLoadError.Create('加载DLL失败');
{ 如果加载DLL成功,取得DLL的输出函数ShowCalendar的地址}
@ShowCalendar := GetProcAddress(LibHandle, 'ShowCalendar');
{ 如果ShowCalendar函数成功输入,显示日历窗口,然后将选择的结果返回}
if not (@ShowCalendar = nil) then
lblDate.Caption := DateToStr(ShowCalendar(Application.Handle, Caption))
else
RaiseLastWin32Error;
finally
FreeLibrary(LibHandle); // 卸载DLL
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -