COM中,通過pIUnknown->QueryInterface(const IID& iid, void** ppv)來查詢,但第一個引數不理解,他不是類ID,是介面ID,但這個const IID& iid是個什么值,是默認的嗎?不是默認的如何獲取?
uj5u.com熱心網友回復:
就是com組件每一個都有一個id,類似名字的概念,你通過這個名字來查找,從而通過ppv把它的介面回傳給你uj5u.com熱心網友回復:
這個名字如何獲得呢
uj5u.com熱心網友回復:
// Generated .IDL file (by the OLE/COM Object Viewer)//
// typelib filename: XCDZIP35.OCX
[
uuid(B26F6243-4C7D-11D1-910E-00600807163F),
version(2.78),
helpstring("Xceed Zip ActiveX Control")
]
library XCEEDZIPLib
{
// TLib : // TLib : Standard OLE Types : {BEF6E001-A874-101A-8BBA-00AA00300CAB}
importlib("olepro32.dll");
// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole32.tlb");
// Forward declare all types defined in this typelib
dispinterface _DXceedZip;
dispinterface _DXceedZipEvents;
[
uuid(B26F6244-4C7D-11D1-910E-00600807163F),
helpstring("Dispatch interface for the Xceed Zip Control"),
hidden
]
dispinterface _DXceedZip {
properties:
[id(0x00000001)]
VARIANT_BOOL Abort;
[id(0x00000002)]
short Compression;
..........
[id(0xfffffdd8)]
void AboutBox();
};
[
uuid(B26F6245-4C7D-11D1-910E-00600807163F),
helpstring("Event interface for the Xceed Zip Control")
]
dispinterface _DXceedZipEvents {
properties:
methods:
[id(0x00000001)]
void Adding(
BSTR* FileName,
long Size,
long PSize,
long Processed,
short FileAttr,
BSTR* FTime,
long CRC,
short Ratio,
short Completion,
short Method,
short Encrypted,
short ComLen,
BSTR* Comment);
[id(0x00000002)]
void Deleting(BSTR* FileName);
[id(0x00000003)]
void Extracting(
BSTR* FileName,
long Size,
long PSize,
long Processed,
short FileAttr,
BSTR* FTime,
long CRC,
short Ratio,
short Completion,
short Method,
short Encrypted,
short ComLen,
BSTR* Comment);
[id(0x00000004)]
void FileComment(
BSTR* FileName,
short* ComLen,
BSTR* Comment);
[id(0x00000005)]
void Fixing(BSTR* FileName);
[id(0x00000006)]
void Listing(
BSTR* FileName,
long Size,
long PSize,
long Processed,
short FileAttr,
BSTR* FTime,
long CRC,
short Ratio,
short Completion,
short Method,
short Encrypted,
short ComLen,
BSTR* Comment);
........................
[id(0x0000000f)]
void Rename(
BSTR* OrigName,
BSTR* NewName);
};
[
uuid(B26F6246-4C7D-11D1-910E-00600807163F),
helpstring("Xceed Zip Control"),
control
]
coclass XceedZip {
[default] dispinterface _DXceedZip;
[default, source] dispinterface _DXceedZipEvents;
};
};
是不是UUID這些呢
uj5u.com熱心網友回復:
幫我看個簡單的OCX加載問題,謝謝了const GUID MyOcxCLSID = {0xB26F6246,0x4C7D,0x11D1,0x91,0x0E,0x00,0x60,0x08,0x07,0x16,0x3F}; //我的OCX,CLSID
if (CoInitialize(NULL) != S_OK) {
printf("Initialize COM library failed!\n");
return 1L;
}
hResult = CoCreateInstance(MyOcxCLSID, NULL,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnknown);
if (hResult != S_OK)
{
printf("Create object failed!\n");
return 1L;
}
//回傳了IID_IUnknown是{00020430-0000-0000-C000-000000000046} //這個IID好象不是我要的

象是系統OLE
hResult = pUnknown->QueryInterface(IID_IUnknown, (void **)&ppIface);
if (hResult != S_OK) {
pUnknown->Release();
printf("QueryInterface IDictionary failed!\n");
CoUninitialize();
return 1L;
}
//回傳的ppIface,通過**查詢,也到不了我的OCX那里,我查了我的OCX是加載到10001000上面,而這個指標指向的地址在5FXXXXXX那,不是我的OCX代碼
if (pUnknown->Release()!= 0)
CoUninitialize();
return 1L;
uj5u.com熱心網友回復:
com 本質論系統學習一下。uj5u.com熱心網友回復:
LS正解,搞本書看看。這個id叫介面ID,說白了,你想要這個COM組件的什么功能,就傳遞什么介面ID就可以了。
uj5u.com熱心網友回復:
一個物件可以有多個介面,CLS_ID是物件的ID,IID是介面的IDuj5u.com熱心網友回復:
就是一個UUID ,一般你需要把它所在定義的.h檔案包起來,不包也行,反正UUID不會變,你復制到你的.h檔案 里面直接用,也可以的。uj5u.com熱心網友回復:
一個組件具體實作了哪些介面,作者會在檔案里說。沒有檔案只有一個IUnknown你什么都干不了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/30287.html
下一篇:(a->x - b->x) * (a->x - b->x) + (a->y - b->y) * (a->y - b->y)是什么意思
