【问题标题】:Delphi - Calling Win APIDelphi - 调用 Win API
【发布时间】:2015-10-27 16:04:13
【问题描述】:

以下代码调用Win API有什么区别

代码 #1:

uses
  Winapi.ActiveX;

procedure Foo();
var
  pv :Pointer;
begin
  CoTaskMemFree(pv);
end;

代码 #2:

procedure CoTaskMemFree(
    pv: Pointer
    ); stdcall; external 'ole32.dll';

procedure Foo();
var
  pv :Pointer;
begin
  CoTaskMemFree(pv);
end;

我注意到代码1的可执行文件大小(161,792字节)大于代码2的可执行文件(23,552字节)。我认为由于 Code 1 也会编译以下单元。

unit Winapi.ActiveX;

uses Winapi.Messages, System.Types, Winapi.Windows;
  • 使用 #Code2 上使用的方法还有其他优点吗?
  • 这样做有风险吗?

【问题讨论】:

    标签: delphi winapi


    【解决方案1】:

    大小的差异是由于您概述的原因。当您使用一个单元时,您的可执行文件将包含来自该单元的代码以及任何相关单元。您可以使用多种选项来减少影响,但是当您使用以前未使用过的单元时,您的可执行文件大小总是会增加。

    procedure CoTaskMemFree(pv: Pointer); stdcall; external 'ole32.dll';
    

    您自己以这种方式定义它是完全合理的,因此请避免使用Winapi.ActiveX。事实上,如果 Delphi RTL 能更细化地支持这些用途,那就更好了。希望访问 COM 堆分配例程是很自然的,但仅此而已。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多