在以下代码中调用Win API有什么区别
代码#1:
uses
Winapi.ActiveX;
procedure Foo();
var
pv :Pointer;
begin
CoTaskMemFree(pv);
end;
Run Code Online (Sandbox Code Playgroud)
代码#2:
procedure CoTaskMemFree(
pv: Pointer
); stdcall; external 'ole32.dll';
procedure Foo();
var
pv :Pointer;
begin
CoTaskMemFree(pv);
end;
Run Code Online (Sandbox Code Playgroud)
我注意到代码1的可执行文件大小(161,792字节)大于代码2的可执行文件(23,552字节).我认为因为Code 1也会编译以下单元.
unit Winapi.ActiveX;
uses Winapi.Messages, System.Types, Winapi.Windows;
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 10
尺寸的差异是出于你勾勒出来的原因.使用单元时,可执行文件将包含该单元的代码以及任何相关单元.您可以使用各种选项来减少影响,但是当您使用以前未使用过的单元时,您的可执行文件大小总是会增加.
procedure CoTaskMemFree(pv: Pointer); stdcall; external 'ole32.dll';
Run Code Online (Sandbox Code Playgroud)
以这种方式自己定义它是完全合理的,因此避免使用Winapi.ActiveX.实际上,如果Delphi RTL更精细地支持这种用途,那将会好得多.希望访问COM堆分配例程是很自然的,但仅此而已.