gpt4 book ai didi

delphi - 如果需要,Delphi 可以只使用 .dll 吗?

转载 作者:行者123 更新时间:2023-12-03 14:55:02 25 4
gpt4 key购买 nike

我已将这两个方法添加到我的 Delphi 5 应用程序的第一个单元中。

function Inp(PortAddress: Integer): Integer; stdcall; external 'inpout32.dll' name 'Inp32';

procedure Output(PortAddress, Value: Integer); stdcall; external 'inpout32.dll' name 'Out32';

但是,除非他们明确需要,否则我不想随软件一起发布 inpout32 库。目前,程序在执行时会显示“未找到”,除非它们存在于根目录或 System32 中。

用户只有在设置了特定选项时才会调用这些方法,但只有在使用输入库之后才会从 .ini 文件中收集这些方法。

有没有办法像某些组件一样只在需要时使用这个库,而不是像我一样声明它?

最佳答案

在 2010 年之前的 Delphi 版本中,您必须使用经典的动态加载。考虑这个典型(且简单)的示例,调用 Beep来自 Kernel32.dll 的函数(当然,您不应该将路径硬编码到实际代码中!):

type
TBeepFunc = function(dwFreq: DWORD; dwDuration: DWORD): BOOL; stdcall;

procedure TForm4.FormClick(Sender: TObject);
var
lib: HMODULE;
prc: TBeepFunc;
begin

lib := LoadLibrary('C:\WINDOWS\System32\Kernel32.dll');
if lib = 0 then RaiseLastOSError;
try
@prc := GetProcAddress(lib, 'Beep');
if Assigned(prc) then
prc(400, 2000)
else
ShowMessage('WTF? No Beep in Kernel32.dll?!');
finally
FreeLibrary(lib);
end;
end;

关于delphi - 如果需要,Delphi 可以只使用 .dll 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com