2010-05-14 36 views

回答

8

另一種可能性:

function UsesRuntimePackages: Boolean; 
begin 
    Result := FindClassHInstance(TObject) <> HInstance; 
end; 
0

你試過「Islibrary」嗎?

+0

試過了。它不起作用。打包和非打包的.exe應用程序都返回False。 – 2010-05-14 07:24:23

+1

EXE永遠不是圖書館。 – 2010-05-14 08:08:38

1

使用可以使用EnumModules()過程中,像這樣:

function EnumModuleProc(HInstance: Integer; Data: Pointer): Boolean; 
begin 
    Result := True; 
    if HInstance <> MainInstance then begin 
    Inc(PInteger(Data)^); 
    Result := False; 
    end; 
end; 

function UsesRuntimePackages: boolean; 
var 
    PckgCount: integer; 
begin 
    PckgCount := 0; 
    EnumModules(EnumModuleProc, @PckgCount); 
    Result := PckgCount > 0; 
end; 
2

另一種可能性,如果你需要這樣一個外部可執行文件(不運行它):

procedure InfoProc(const Name: string; NameType: TNameType; Flags: Byte; Param: Pointer); 
begin 
    case NameType of 
    ntContainsUnit: 
     if Name = 'System' then 
     PBoolean(Param)^ := False; 
    end; 
end; 

function UsesRuntimePackages(const ExeName: TFileName): Boolean; 
var 
    Module: HMODULE; 
    Flags: Integer; 
begin 
    Result := True; 

    Module := LoadLibraryEx(PChar(ExeName), 0, LOAD_LIBRARY_AS_DATAFILE); 
    try 
    Flags := 0; 
    GetPackageInfo(Module, @Result, Flags, InfoProc); 
    finally 
    FreeLibrary(Module); 
    end; 
end; 
相關問題