2013-10-19 90 views

回答

8

CLSID是標識COM對象的GUID。爲了實例化一個已註冊的COM對象,你需要知道它的CLSID。

通常在德爾福你會打電話CoCreateInstance。您只需調用該函數並傳遞一個CLSID。聲明CoCreateInstance聲明類ID參數的類型爲​​,它是TGUID的簡單別名。所以通過其中一個。

以下是聲明,從Delphi源解除:

type 
    TCLSID = TGUID; 

function CoCreateInstance(const clsid: TCLSID; unkOuter: IUnknown; 
    dwClsContext: Longint; const iid: TIID; out pv): HResult; stdcall; 

CoCreateInstance一個電話,從我的代碼庫採取的一個例子:

const 
    CLSID_WICImagingFactory: TGUID = '{CACAF262-9370-4615-A13B-9F5539DA4C0A}'; 

if not Succeeded(CoCreateInstance(CLSID_WICImagingFactory, ...)) then 
    ... 

你可能會被創建不同的接口,所以需要用適當的CLSID代替該接口。

還有一個值得了解的小技巧。如果將接口類型作爲TGUID類型的參數傳遞,並且該接口類型具有GUID,則編譯器將爲您替換GUID。所以上面的代碼也同樣可以寫成:

type 
    IWICImagingFactory = interface 
    // this is the GUID of the interface, the CLSID 
    [{ec5ec8a9-c395-4314-9c77-54d7a935ff70}] 
    .... 
    end; 

.... 

if not Succeeded(CoCreateInstance(IWICImagingFactory, ...)) then 
    ... 
+0

的UUID命名謝謝,這是我想知道的,CLSID是一個GUID。 –

+0

你可以通過查看源代碼來辨別。你的Delphi版本是否帶有源代碼? –

+0

是的,它的劑量,但我找不到CLSID或TCLSID。 –

6

什麼是CLSID?類別ID(CLSID)是一個128位(大)數字,表示軟件應用程序或應用程序組件的唯一ID。通常它們顯示爲如此 「{AE7AB96B-FF5E-4dce-801E-14DF2C4CD681}」。

您可以將CLSID視爲一個 軟件或軟件組件的「社會安全號碼」。

它們用於什麼? Windows使用CLSID識別軟件組件,而不必知道它們的「名稱」。他們還可以通過軟件應用程序使用 來識別計算機,文件或其他 項目。

它們來自哪裏? Microsoft提供了一個名爲GUIDGEN.EXE的實用程序(程序),可以生成這些數字。它們由 使用計算機中的當前時間,網絡適配器地址(如果存在)和其他 項目生成,因此不會有兩個數字相同。[1]

COM類由CLSID的,它們是由OSF/DCE RPC所限定[2]

兩個引號引用

+0

所以CLSID和GUID是一樣的嗎? –

+2

是的,都嘗試使(僞)唯一的ID。 CLSID以COM類對象爲目標。 – deepmax

+0

謝謝,這也有幫助。 –

相關問題