2015-10-27 20 views
9

Qual è la differenza tra chiamare un'API Vinci seguenti codiciDelphi - Calling Win API

Codice # 1:

uses 
    Winapi.ActiveX; 

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

Codice # 2:

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

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

Ho notato che la dimensione del file eseguibile di Codice 1 (161.792 byte) è più grande di file eseguibile di codice 2 (23.552 byte). penso che grazie al codice 1 verranno compilate anche le seguenti unità.

unit Winapi.ActiveX; 

uses Winapi.Messages, System.Types, Winapi.Windows; 
  • C'è un altro vantaggio di usare il metodo utilizzato su # Code2?
  • C'è qualche rischio di farlo?

risposta

10

La differenza di dimensioni è per le ragioni che si delineano. Quando usi un'unità, il tuo eseguibile conterrà il codice di quell'unità e qualsiasi unità dipendente. Esistono varie opzioni che è possibile utilizzare per ridurre l'impatto, ma invariabilmente le dimensioni dell'eseguibile aumenteranno quando si utilizza un'unità non utilizzata in precedenza.

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

è perfettamente ragionevole per di definire da soli, in questo modo, e così evitare l'uso Winapi.ActiveX. In effetti, sarebbe molto meglio se l'RTL di Delphi fosse più granulare per supportare tali usi. È piuttosto naturale voler accedere alle routine di allocazione dell'heap COM, ma niente di più.

+0

grazie per l'ottima spiegazione. – RepeatUntil