DOC: Toàn c?u h?i Cache (G?C) API đư?c không di?n t? trong các.NET Framework ph?n m?m phát tri?n Kit (SDK) tài li?u hư?ng d?n

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 317540
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Giao di?n l?p tr?nh ?ng d?ng b?n đ?a c?a m? (API) cho phép b?n tương tác v?i b? nh? Cache h?i toàn c?u (G?C) không tài li?u trong các.NET Framework ph?n m?m phát tri?n Kit (SDK) tài li?u hư?ng d?n.

THÔNG TIN THÊM

TH?N TR?NG: Không s? d?ng các API trong ?ng d?ng c?a b?n đ? th?c hi?n các l?p ráp liên k?t v?i ho?c đ? th? nghi?m cho s? hi?n di?n c?a h?i đ?ng khác nhau ho?c khác th?i gian ch?y, phát tri?n, ho?c thi?t k?-th?i gian ho?t đ?ng. Ch? có công c? qu?n tr? và thi?t l?p các chương tr?nh ph?i s? d?ng các API. N?u b?n s? d?ng G?C, đi?u này tr?c ti?p cho th?y nhi?u ?ng d?ng c?a b?n đ? l?p ráp ràng bu?c mong manh ho?c có th? làm cho ?ng d?ng c?a b?n đ? làm vi?c không đúng trên Phiên b?n tương lai c?a các.NET Framework.

G?C lưu các h?i đ?ng khác nhau mà đư?c chia s? trên t?t c? các ?ng d?ng trên m?t máy tính. Th?c t? v? trí löu trö? và c?u trúc c?a G?C là không tài li?u và có th? thay đ?i trong tương lai các phiên b?n c?a các.NET Framework và đi?u hành Microsoft Windows h? th?ng.

Là phương pháp duy nh?t đư?c h? tr? đ? truy c?p vào h?i đ?ng khác nhau trong G?C thông qua các API đư?c di?n t? trong bài vi?t này.

H?u h?t các các ?ng d?ng không c?n ph?i s? d?ng các API v? h?i đ?ng tính ràng bu?c là th?c hi?n t? đ?ng b?i th?i gian ch?y ngôn ng? ph? bi?n. Thi?t l?p tùy ch?nh ch? chương tr?nh ho?c công c? qu?n l? ph?i s? d?ng các API. Microsoft Windows Installer có h? tr? b?n x? đ? cài đ?t các h?i đ?ng khác nhau đ? G?C.

Đ? bi?t thêm thông tin v? h?i đ?ng khác nhau và G?C, xem các.NET Framework SDK.

S? d?ng API G?C trong các k?ch b?n sau đây:
  • Khi b?n cài đ?t m?t h?i đ?ng đ? G?C.
  • Khi b?n lo?i b? m?t h?i đ?ng t? G?C.
  • Khi b?n xu?t kh?u m?t h?i đ?ng t? G?C.
  • Khi b?n li?t kê h?i đ?ng có s?n trong các G?C.
LƯU ?: CoInitialize(Ex) ph?i đư?c g?i là trư?c khi b?n s? d?ng b?t k? ch?c năng và giao di?n mà đư?c mô t? trong đ?c t? này.

Giao di?n IAssemblyCache

Các IAssemblyCache giao di?n là giao di?n c?p cao nh?t đ? truy c?p vào các G?C.

Đ? có đư?c m?t th? hi?n c?a các CreateAssemblyCache API, cu?c g?i các CreateAssemblyCache API, như sau:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
Các thông s? đư?c đ?nh ngh?a như sau:
  • ppAsmCache - con tr? đ? tr? v? IAssemblyCache
  • dwReserved

C?u trúc FUSION_INSTALL_REFERENCE

Các FUSION_INSTALL_REFERENCE c?u trúc đ?i di?n cho m?t tài li?u tham kh?o đư?c th?c hi?n khi m?t ?ng d?ng đ? cài đ?t m?t h?i đ?ng trong G?C.
    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme;     // Contains one of the pre-defined GUIDs.
        LPCWSTR szIdentifier;  // Unique identifier for the application that installs this  assembly.
        LPCWSTR szNonCannonicalData;  // Data is description; relevant to the GUID above. 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
				
Các l?nh v?c cơ c?u đư?c đ?nh ngh?a như sau:
  • cbSize -Kích thư?c c?u trúc trong byte.
  • dwFlags -Reserved, ph?i là s? không.
  • guidScheme -Các th?c th? có thêm tài li?u tham kh?o.
  • szIdentifier -M?t chu?i duy nh?t đ? nh?n d?ng ?ng d?ng cài đ?t H?i đ?ng.
  • szNonCannonicalData -M?t chu?i mà ch? là hi?u b?i các th?c th? cho bi?t thêm r?ng các tài li?u tham kh?o. G?C ch? lưu tr? chu?i này.
Có th? các giá tr? cho các guidScheme l?nh v?c có th? là m?t trong nh?ng đi?u sau đây:
  • FUSION_REFCOUNT_MSI_GUID -L?p ráp đư?c tham chi?u b?i m?t ?ng d?ng đ? cài đ?t b?ng cách s? d?ng b? cài đ?t Windows. Các szIdentifier trư?ng đư?c thi?t l?p đ? MSI, và szNonCannonicalData đư?c thi?t l?p đ? Cài đ?t Windows. Chương tr?nh này ph?i ch? đư?c s? d?ng b?i Windows cài đ?t riêng c?a m?nh.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID -L?p ráp đư?c tham chi?u b?i m?t ?ng d?ng xu?t hi?n trong Thêm/lo?i b? chương tr?nh. Các szIdentifier l?nh v?c này là m? thông báo đư?c s? d?ng đ? đăng k? ?ng d?ng v?i Thêm/lo?i b? chương tr?nh.
  • FUSION_REFCOUNT_FILEPATH_GUID -L?p ráp đư?c tham chi?u b?i m?t ?ng d?ng đó là đ?i di?n b?i m?t t?p tin trong h? th?ng t?p tin. Các szIdentifier l?nh v?c là đư?ng d?n đ?n t?p này.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID -L?p ráp đư?c tham chi?u b?i m?t ?ng d?ng ch? đ?i di?n b?i m?t chu?i đ?c. Các szIdentifier Đây có ph?i là đ?c chu?i. G?C không th?c hi?n s? t?n t?i ki?m tra tài li?u tham kh?o đ?c khi b?n lo?i b? đi?u này.

C?u trúc ASSEMBLY_INFO

Các ASSEMBLY_INFO c?u trúc đ?i di?n cho thông tin v? l?p ráp m?t trong các b? nh? cache l?p ráp.

Các l?nh v?c cơ c?u đư?c đ?nh ngh?a như sau:
  • cbAssemblyInfo -Kích thư?c c?u trúc trong byte. Gi?y phép b? sung vào các cơ c?u t? ch?c phiên b?n trong tương lai các.NET Framework.
  • dwAssemblyFlags -Ch? ra m?t ho?c nhi?u các ASSEMBLYINFO_FLAG_ * bit.
  • uliAssemblySizeInKB -Kích thư?c t?p tin t?o nên h?i đ?ng theo kilobyte (KB).
  • pszCurrentAssemblyPathBuf -M?t con tr? ch? t?i m?t b? đ?m chu?i ch?a đư?ng d?n hi?n t?i c?a các thư m?c có ch?a các t?p tin t?o nên h?i đ?ng. Đư?ng d?n ph?i k?t thúc v?i m?t s? không.
  • cchBuf -Kích thư?c b? đ?m mà các pszCurrentAssemblyPathBug l?nh v?c ch?.
dwAssemblyFlags có th? có m?t trong các giá tr? sau:
  • ASSEMBLYINFO_FLAG__INSTALLED -Ch? ra r?ng h?i đ?ng th?c s? đư?c cài đ?t. Luôn luôn đ?t trong phiên b?n hi?n t?i c?a các.NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT -Không bao gi? đ?t ? phiên b?n hi?n t?i c?a các.NET Khuôn kh?.

Phương pháp IAssemblyCache::UninstallAssembly

Các IAssemblyCache::UninstallAssembly phương pháp lo?i b? m?t tham chi?u đ?n m?t h?i đ?ng t? G?C. N?u khác các ?ng d?ng gi? không có khác tham chi?u đ?n qu?c h?i, các t?p tin t?o nên H?i đ?ng đư?c rút kh?i G?C.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
Các thông s? đư?c đ?nh ngh?a như sau:
  • dwFlags -Không có lá c? xác đ?nh. Ph?i là s? không.
  • pszAssemblyName -Tên c?a h?i đ?ng. M?t s? không k?t thúc Unicode chu?i.
  • pRefData -M?t con tr? đ?n m?t FUSION_INSTALL_REFERENCE c?u trúc. M?c dù đi?u này không nên, tham s? này có th? đư?c null. H?i đ?ng đư?c cài đ?t mà không có m?t tham chi?u ?ng d?ng, ho?c t?t c? hi?n có ?ng d?ng tham kh?o đ? m?t h?t.
  • pulDisposition -Con tr? ch? t?i m?t s? nguyên ch? ra hành đ?ng đó là th?c hi?n các ch?c năng.
LƯU ?: N?u pulDisposition không ph?i là null, pulDisposition chi này có m?t trong các giá tr? sau:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED -Các t?p tin l?p ráp đ? đư?c xoá kh?i G?C.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE -M?t ?ng d?ng đang s? d?ng y Cynulliad. Giá tr? này đư?c tr? l?i vào Microsoft Windows 95 và Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED -H?i đ?ng không t?n t?i trong G?C.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING -Không đư?c s? d?ng.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES -H?i đ?ng đ? không đư?c g? b? t? G?C, b?i v? m?t ?ng d?ng tham kh?o t?n t?i.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND -Tài li?u tham kh?o đư?c xác đ?nh trong pRefData không t?m th?y trong G?C.
Giá tr? tr? l?i đư?c đ?nh ngh?a như sau:
  • S_OK -L?p ráp đ? đư?c g? b? cài đ?t.
  • S_FALSE -Các ho?t đ?ng đ? thành công, nhưng h?i đ?ng không đư?c g? b? t? G?C. L? do đư?c mô t? trong pulDisposition.

Phương pháp IAssemblyCache::QueryAssemblyInfo

Các IAssemblyCache::QueryAssemblyInfo phương pháp l?y thông tin v? m?t h?i đ?ng t? G?C.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • dwFlags -M?t trong QUERYASMINFO_FLAG_VALIDATE ho?c QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE -Th?c hi?n xác nh?n c?a các t?p tin trong G?C ch?ng l?i các h?i v?n, bao g?m các băm xác minh và m?nh m? tên ch? k? xác minh.
    • * _GETSIZE -Tr? l?i kích thư?c c?a t?t c? các file trong h?i đ?ng (đ?a d?u chân). N?u đi?u này không đư?c ch? đ?nh, các ASSEMBLY_INFO::uliAssemblySizeInKB l?nh v?c không thay đ?i.
  • pszAssemblyName -Tên c?a h?i đ?ng đó truy v?n.
  • pAsmInfo -Con tr? đ?n vi?c quay tr? l?i ASSEMBLY_INFO c?u trúc.

Phương pháp IAssemblyCache::InstallAssembly

Các IAssemblyCache::InstallAssembly phương pháp thêm m?t qu?c h?i m?i cho G?C. H?i đ?ng ph?i ti?p t?c t?n t?i trong h? th?ng t?p tin và sao chép vào G?C.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • dwFlags -T?i h?u h?t, là m?t trong các bit c?a các IASSEMBLYCACHE_INSTALL_FLAG_ * các giá tr? có th? đư?c xác đ?nh:
    • * _REFRESH -N?u h?i đ?ng đ? đư?c cài đ?t trong G?C và t?p tin các con s? phiên b?n c?a h?i đ?ng đang đư?c cài đ?t là như nhau ho?c sau này, các t?p đư?c thay th?.
    • * _FORCE_REFRESH -Các t?p tin c?a m?t h?i đ?ng hi?n t?i đang ghi đè b?t k? s? phiên b?n c?a h?.
  • pszManifestFilePath -M?t chu?i tr? đ?n các thư vi?n liên k?t đ?ng (DLL) mà ch?a các th? v?n h?i. Các t?p tin khác l?p ráp ph?i n?m trong cùng m?t thư m?c như DLL có ch?a v?n h?i.
  • pRefData -M?t con tr? đ?n m?t FUSION_INSTALL_REFERENCE mà ch? ra các ?ng d?ng trên danh ngh?a mà h?i đ?ng là đang đư?c cài đ?t. M?c dù đi?u này không nên, tham s? này có th? không, nhưng đi?u này lá h?i đ?ng mà không có b?t k? tham chi?u ?ng d?ng.

Giao di?n IAssemblyName

Các IAssemblyName giao di?n đ?i di?n cho m?t tên l?p ráp. Tên h?i bao g?m đ?nh trư?c b? là c?p tên giá tr?. Tên h?i đư?c mô t? trong chi ti?t trong các.NET Framework SDK.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
M?t th? hi?n c?a IAssemblyName thu đư?c b?ng cách g?i các CreateAssemblyNameObject API:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
Các thông s? đư?c đ?nh ngh?a như sau:
  • ppAssemblyNameObj -Con tr? t?i m?t v? trí b? nh? s? nh?n đư?c các IAssemblyName con tr? đư?c t?o ra.
  • szAssemblyName -M?t đ?i di?n chu?i tên h?i ho?c c?a m?t đ?y đ? tham kh?o l?p ráp đư?c xác đ?nh b?i dwFlags. Đ?i di?n chu?i có th? đư?c null.
  • dwFlags -S? không hay nhi?u c?a các bit đư?c đ?nh ngh?a trong các CREATE_ASM_NAME_OBJ_FLAGS li?t kê.
  • pvReserved -Ph?i là null.

CREATE_ASM_NAME_OBJ_FLAGS đ?m

Các CREATE_ASM_NAME_OBJ_FLAGS li?t kê có ch?a các giá tr? sau:
  • CANOF_PARSE_DISPLAY_NAME -N?u lá c? này đư?c ch? đ?nh, các szAssemblyName tham s? là tên đ?y đ? l?p ráp và đư?c phân tách cho cá nhân b?t đ?ng s?n. N?u lá c? không đư?c ch? đ?nh, szAssemblyName là ph?n "Tên" tên l?p ráp.
  • CANOF_SET_DEFAULT_VALUES -N?u lá c? này là thu?c tính đư?c ch? đ?nh, nh?t đ?nh, ch?ng h?n như ki?n trúc b? x? l?, đư?c đ?t v? giá tr? m?c đ?nh c?a h?.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

ASM_NAME đ?m

Các ASM_NAME li?t kê tài s?n ID mô t? tên h?p l? c?a các c?p tên giá tr? trong m?t tên l?p ráp. Xem các.NET Framework SDK cho m?t mô t? v? các đ?c tính này.
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
				

Phương pháp IAssemblyName::SetProperty

Các IAssemblyName::SetProperty phương pháp cho bi?t thêm m?t c?p tên giá tr? đ? l?p ráp tên, ho?c, n?u m?t giá tr? tên c?p có cùng tên đ? t?n t?i, s?a đ?i ho?c xóa các giá tr? c?a m?t c?p tên giá tr?.
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • PropertyId -ID đ?i di?n cho m?t ph?n tên c?a giá tr? tên c?p đó là đ? đư?c thêm vào ho?c đư?c đ?i. B?t đ?ng s?n h?p l? ID đư?c đ?nh ngh?a trong các ASM_NAME li?t kê.
  • pvProperty -M?t con tr? ch? t?i m?t b? đ?m ch?a các giá tr? c?a các b?t đ?ng s?n.
  • cbProperty -Chi?u dài c?a các pvProperty b? đ?m trong byte. N?u cbProperty là zero, c?p giá tr? tên đư?c l?y ra t? h?i đ?ng Tên.

Phương pháp IAssemblyName::GetProperty

Các IAssemblyName::GetProperty phương pháp l?y giá tr? c?a m?t tên giá tr? c?p trong h?i đ?ng tên ch? đ?nh tên.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • PropertyId -ID mà đ?i di?n tên giá tr? tên c?p mà giá tr? là đ? đư?c l?y. B?t đ?ng s?n đ? ch? đ?nh ID đư?c đ?nh ngh?a trong các ASM_NAME li?t kê.
  • pvProperty -M?t con tr? ch? t?i m?t b? đ?m mà là có ch?a các giá tr? c?a các b?t đ?ng s?n.
  • cbProperty -Chi?u dài c?a các pvProperty b? đ?m, t?i byte.

Phương pháp IAssemblyName::Finalize

Các IAssemblyName::Finalize phương pháp đóng băng m?t tên l?p ráp. Thêm các cu?c g?i đ?n IAssemblyName::SetProperty không thành công sau khi phương pháp này đư?c g?i là.
HRESULT Finalize();

Phương pháp IAssemblyName::GetDisplayName

Các IAssemblyName::GetDisplayName phương pháp tr? v? chu?i đ?i di?n cho tên qu?c h?i.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • szDisplayName -M?t con tr? ch? t?i m?t b? đ?m mà là có ch?a tên hi?n th?. Các tên hi?n th? đư?c tr? l?i trong b?ng m? Unicode.
  • pccDisplayName -Kích thư?c b? đ?m trong k? t? (trên đ?u vào). Chi?u dài c?a tên hi?n th? tr? l?i (ngày tr? l?i).
  • dwDisplayFlags -M?t ho?c nhi?u c?a các bit đư?c đ?nh ngh?a trong các ASM_DISPLAY_FLAGS li?t kê:
    • * _VERSION -Bao g?m các s? phiên b?n như m?t ph?n c?a màn h?nh Tên.
    • * _CULTURE -Bao g?m các n?n văn hóa.
    • * _PUBLIC_KEY_TOKEN -Bao g?m m? thông báo quan tr?ng công c?ng.
    • * _PUBLIC_KEY -Bao g?m các khóa công khai.
    • * _CUSTOM -Bao g?m m?t ph?n tùy ch?nh tên l?p ráp.
    • * _PROCESSORARCHITECTURE -Bao g?m các ki?n trúc b? x? l?.
    • * _LANGUAGEID -Bao g?m các ngôn ng? c?a b?n.
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
				

Phương pháp IAssemblyName::GetName

Các IAssemblyName::GetName phương pháp tr? v? ph?n tên c?a tên l?p ráp.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • lpcwBuffer -Kích thư?c c?a các pwszName b? đ?m (trên đ?u vào). Đ? dài c?a tên (ngày tr? l?i).
  • pwszName -Con tr? ch? t?i các b? đ?m là có ch?a m?t ph?n tên c?a các l?p ráp tên.

Phương pháp IAssemblyName::GetVersion

Các IAssemblyName::GetVersion phương pháp tr? v? ph?n Phiên b?n c?a tên l?p ráp.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • pdwVersionHi -Con tr? đ?n m?t DWORD ch?a 32 bit trên c?a các s? phiên b?n.
  • pdwVersionLow -Con tr? đ?n m?t DWORD ch?a 32 bit th?p c?a các s? phiên b?n.

Phương pháp IAssemblyName::IsEqual

Các IAssemblyName::IsEqual phương pháp so sánh tên l?p ráp m?t l?p ráp names.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • pName -H?i đ?ng tên đ? so sánh v?i.
  • dwCmpFlags -Ch? ra mà m?t ph?n c?a tên g?i qu?c h?i đ? s? d?ng trong các so sánh.
Các giá tr? là m?t hay nhi?u hơn n?a c?a các bit đ?nh ngh?a trong các ASM_CMP_FLAGS li?t kê:
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true. However, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparison.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       
				
Giá tr? tr? l?i là như sau:
  • S_OK: -Các tên phù h?p theo đ? so sánh tiêu chí.
  • S_FALSE: -Các tên không kh?p.

Phương pháp IAssemblyName::Clone

Các IAssemblyName::Clone phương pháp t?o ra m?t b?n sao c?a tên máy l?p ráp.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

Giao di?n IAssemblyEnum

Các IAssemblyEnum giao di?n li?t kê các h?i đ?ng khác nhau trong G?C.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Đ? có đư?c m?t th? hi?n c?a các CreateAssemblyEnum API, cu?c g?i các CreateAssemblyNameObject API, như sau:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Các thông s? đư?c đ?nh ngh?a như sau:
  • pEnum -Con tr? t?i m?t v? trí b? nh? có ch?a các IAssemblyEnum con tr?.
  • pUnkReserved -Ph?i là null.
  • pName -L?p ráp tên đư?c s? d?ng đ? l?c đ?m. Có th? null li?t kê t?t c? các h?i đ?ng khác nhau trong G?C.
  • dwFlags -Chính xác m?t chút t? các ASM_CACHE_FLAGS li?t kê.
  • pvReserved -Ph?i là NULL.

ASM_CACHE_FLAGS đ?m

Các ASM_CACHE_FLAGS li?t kê có ch?a các giá tr? sau:
  • ASM_CACHE_ZAP -Li?t kê b? nh? cache c?a t?o h?i đ?ng khác nhau b?ng cách s? d?ng Ngen.exe.
  • ASM_CACHE_GAC -Li?t kê G?C.
  • ASM_CACHE_DOWNLOAD -Li?t kê các h?i đ?ng khác nhau đ? đư?c t?i v? theo yêu c?u ho?c r?ng shadow sao chép.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

Phương pháp IAssemblyEnum::GetNextAssembly

Các IAssemblyEnum::GetNextAssembly phương pháp li?t kê các h?i đ?ng khác nhau trong G?C.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • pvReserved -Ph?i là null.
  • ppName -Con tr? t?i m?t v? trí b? nh? là đ? nh?n các giao di?n con tr? ch? t?i tên l?p ráp c?a h?i đ?ng ti?p theo đó là li?t kê.
  • dwFlags -Ph?i là s? không.

Giao di?n IInstallReferenceItem

Các IInstallReferenceItem giao di?n đ?i di?n cho m?t tham chi?u đ? đư?c đ?t trên m?t h?i đ?ng trong G?C. Trư?ng h?p c?a IInstallReferenceIteam đư?c tr? v? b?i các IInstallReferenceEnum giao di?n.
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

Phương pháp IInstallReferenceItem::GetReference

Các IInstallReferenceItem::GetReference phương pháp tr? v? m?t FUSION_INSTALL_REFERENCE c?u trúc.
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • ppRefData -M?t con tr? đ?n m?t FUSION_INSTALL_REFERENCE c?u trúc. B? nh? đư?c c?p phát b?i các GetReference phương pháp và đư?c gi?i phóng khi IInstallReferenceItem đư?c phát hành. Ngư?i g?i không ph?i gi? m?t tham chi?u đ?n b? đ?m này sau khi các IInstallReferenceItem đ?i tư?ng đư?c phát hành.
  • dwFlags -Ph?i là s? không.
  • pvReserved -Ph?i là null.

Giao di?n IInstallReferenceEnum

Các IInstallReferenceEnum giao di?n li?t kê t?t c? các tài li?u tham kh?o đư?c đ?t trên m?t h?i đ?ng trong G?C.

LƯU ?: Tham kh?o thu?c v? h?i đ?ng đang b? khóa đ? thay đ?i trong khi nh?ng tài li?u tham kh?o đư?c đang đư?c li?t kê.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Đ? có đư?c m?t th? hi?n c?a các CreateInstallReferenceEnum API, cu?c g?i các CreateInstallReferenceEnum API, như sau:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Các thông s? đư?c đ?nh ngh?a như sau:
  • ppRefEnum -M?t con tr? đ?n m?t b? nh? v? trí mà nh?n đư?c các IInstallReferenceEnum con tr?.
  • pName -H?i đ?ng tên mà các tài li?u tham kh?o r?t li?t kê.
  • dwFlags -Ph?i là s? không.
  • pvReserved -Ph?i là null.

Phương pháp IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem tr? v? nh?ng thông tin tham kh?o ti?p theo cho m?t h?i đ?ng.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
Các thông s? đư?c đ?nh ngh?a như sau:
  • ppRefItem -Con tr? t?i m?t v? trí b? nh? s? nh?n đư?c các IInstallReferenceItem con tr?.
  • dwFlags -Ph?i là s? không.
  • pvReserved -Ph?i là null.
Giá tr? tr? l?i là như sau:
  • S_OK: -M?c k? ti?p tr? l?i thành công.
  • S_FALSE: -Không có kho?n m?c hơn.

GetCachePath API

Các GetCachePath API tr? v? v? trí lưu tr? G?C.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Các thông s? đư?c đ?nh ngh?a như sau:
  • dwCacheFlags -Chính xác là m?t trong các bit đư?c đ?nh ngh?a trong các ASM_CACHE_FLAGS li?t kê.
  • pwzCachePath -Con tr? ch? t?i m?t b? đ?m mà là đ? nh?n đư?ng d?n G?C như m?t Unicode chu?i.
  • pcchPath -Chi?u dài c?a các pwszCachePath b? đ?m, k? t? Unicode.
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//+---------------------------------------------------------------------------
// 
//  Microsoft Windows
//  File:       fusion.idl
// 
//  Contents:   Fusion Interfaces
// 
//  Classes:
// 
//  Functions:
// 
// 
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation.  All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma once")
cpp_quote("#endif")

interface IAssemblyCache;
interface IAssemblyCacheItem;
interface IAssemblyName;
interface IAssemblyEnum;


typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCache
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCache : IUnknown
{
    cpp_quote("// {8cedc215-ac4b-488b-93c0-a50a49cb2fb8}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID, 0x8cedc215, 0xac4b, 0x488b, 0x93, 0xc0, _
0xa5, 0x0a, 0x49, 0xcb, 0x2f, 0xb8);")
    cpp_quote("")
    cpp_quote("// {b02f9d65-fb77-4f7a-afa5-b391309f11c9}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_FILEPATH_GUID, 0xb02f9d65, 0xfb77, 0x4f7a, 0xaf, 0xa5, 0xb3, 0x91, _
0x30, 0x9f, 0x11, 0xc9);")
    cpp_quote("")
    cpp_quote("// {2ec93463-b0c3-45e1-8364-327e96aea856}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_OPAQUE_STRING_GUID, 0x2ec93463, 0xb0c3, 0x45e1, 0x83, 0x64, 0x32, _
0x7e, 0x96, 0xae, 0xa8, 0x56);")

    cpp_quote(" // {25df0fc1-7f97-4070-add7-4b13bbfd7cb8} // this GUID cannot be used for installing into GAC.")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_MSI_GUID,  0x25df0fc1, 0x7f97, 0x4070, 0xad, 0xd7, 0x4b, 0x13, 0xbb, 0xfd, _
0x7c, 0xb8); ")


    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme; // contains one of the pre-defined guids.
        LPCWSTR szIdentifier;  // unique identifier for app installing this  assembly.
        LPCWSTR szNonCannonicalData;  // data is description; relevent to the guid above 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;

    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;


    typedef struct _ASSEMBLY_INFO
    {
        ULONG cbAssemblyInfo; // size of this structure for future expansion
        DWORD dwAssemblyFlags;
        ULARGE_INTEGER uliAssemblySizeInKB;
        LPWSTR pszCurrentAssemblyPathBuf;
        ULONG   cchBuf; // size of path buf.
    } ASSEMBLY_INFO;

    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH (0x00000002)")

    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED (1)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE (2)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED (3)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING (4)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES (5)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND (6)")

    cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE        (0x00000001)")
    cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE         (0x00000002)")

    // these flags are for dwAssemblyFlags field in struct _ASSEMBLY_INFO  
    cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED       (0x00000001)")
    cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT (0x00000002)")

    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );
 
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
 
    HRESULT CreateAssemblyCacheItem( 
        [in] DWORD dwFlags,
        [in] PVOID pvReserved,
        [out] IAssemblyCacheItem **ppAsmItem,
        [in, optional] LPCWSTR pszAssemblyName  // uncanonicalized, comma separated name=value pairs.
        );
        
    HRESULT CreateAssemblyScavenger
    (
        [out]   IUnknown **ppUnkReserved
    );

    HRESULT InstallAssembly( // if you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );

}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCacheItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCacheItem : IUnknown
{
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE    0")
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST  1")
    cpp_quote("#define STREAM_FORMAT_WIN32_MODULE      2")
    cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST    4")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH (0x00000002)")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED (1)") // first time install
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED (2)") // overwrite, if existing
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED (3)") // existing, 
    

    HRESULT CreateStream(
        [in] DWORD dwFlags,                         // For general API flags
        [in] LPCWSTR pszStreamName,                 // Name of the stream to be passed in
        [in] DWORD dwFormat,                        // format of the file to be streamed in.
        [in] DWORD dwFormatFlags,                   // format-specific flags
        [out] IStream **ppIStream,
        [in, optional] ULARGE_INTEGER *puliMaxSize  // Max size of the Stream.
        );
 
    HRESULT Commit
    (
        [in] DWORD dwFlags, // For general API flags like IASSEMBLYCACHEITEM _COMMIT_FLAG_REFRESH 
        [out, optional] ULONG *pulDisposition
    ); 
 
    HRESULT AbortItem(); // If you have created IAssemblyCacheItem and don't plan to use it, its good idea to call 
    AbortItem before releasing it.

}



/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyName
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
{
    typedef [unique] IAssemblyName *LPASSEMBLYNAME;
    
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
    
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
    
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
    
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true, however, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparision.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       

    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);

    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);

    HRESULT Finalize();

    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);

    HRESULT BindToObject(
        [in]      REFIID               refIID,
        [in]      IUnknown            *pUnkSink, 
        [in]      IUnknown            *pUnkContext,
        [in]      LPCOLESTR            szCodeBase,
        [in]      LONGLONG             llFlags,
        [in]      LPVOID               pvReserved,
        [in]      DWORD                cbReserved,
        [out]     LPVOID               *ppv);


    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
        
    HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);

    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
        
    HRESULT Clone(
        [out] IAssemblyName **pName);
        

}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyEnum
// 
/////////////////////////////////////////////////////////////////////////////// 
[
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
{

    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );

    HRESULT Reset(void);

    HRESULT Clone 
    (
        [out] IAssemblyEnum **ppEnum
    );
    
}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
{
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceEnum
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
{
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
}

#pragma midl_echo("STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ")
#pragma midl_echo("STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ") 
#pragma midl_echo("STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, _
LPVOID pvReserved);             ")
#pragma midl_echo("STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); ")
#pragma midl_echo("STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath); ")
				

Thu?c tính

ID c?a bài: 317540 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
T? khóa: 
kbbug kbdocerr kbpending kbmt KB317540 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:317540
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài vi?t này nói v? các s?n ph?m mà Microsoft không c?n h? tr? n?a. Do đó, bài vi?t này đư?c cung c?p "nguyên b?n" và s? không đư?c c?p nh?t.

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com