LPVOID FAR* ppIface=NULL;
const GUID MyOcxCLSID = {0xB26F6246,0x4C7D,0x11D1,0x91,0x0E,0x00,0x60,0x08,0x07,0x16,0x3F }; //My CLSID:XCDZIP35.OCX
const IID MyOcxFaceID = {0xB26F6244,0x4C7D,0x11D1,0x91,0x0E,0x00,0x60,0x08,0x07,0x16,0x3F }; 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;
} hResult = pUnknown->QueryInterface(IID_IUnknown, (void **)&ppIface); if (hResult != S_OK) {
pUnknown->Release();
printf("QueryInterface IDictionary failed!\n");
return 1L;
}上面的IID_IUnknown指向的不是我的OCX的对象,是系统OLEXXX的,导致我后面ppIface获取的不是我的OCX接口指针,我用MyOcxFaceID代替也没用,我用OLE-VIEW查了一下我的OCX,// 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(0x00000026)]
VARIANT_BOOL SfxInstallMode;
[id(0x00000027), hidden]
BSTR InternalState;
methods:
[id(0x00000028), propget]
BSTR SfxPrompts(short SfxPromptID);
[id(0x00000028), propput]
void SfxPrompts(
short SfxPromptID,
BSTR rhs);
………………
[id(0x0000003b)]
void SfxResetDefaultStrings();
[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);
………………
}; [
uuid(B26F6246-4C7D-11D1-910E-00600807163F),
helpstring("Xceed Zip Control"),
control
]
coclass XceedZip {
[default] dispinterface _DXceedZip;
[default, source] dispinterface _DXceedZipEvents;
};
};请问一下,这到底怎么回到,我想获取我的OCX的虚拟表
const GUID MyOcxCLSID = {0xB26F6246,0x4C7D,0x11D1,0x91,0x0E,0x00,0x60,0x08,0x07,0x16,0x3F }; //My CLSID:XCDZIP35.OCX
const IID MyOcxFaceID = {0xB26F6244,0x4C7D,0x11D1,0x91,0x0E,0x00,0x60,0x08,0x07,0x16,0x3F }; 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;
} hResult = pUnknown->QueryInterface(IID_IUnknown, (void **)&ppIface); if (hResult != S_OK) {
pUnknown->Release();
printf("QueryInterface IDictionary failed!\n");
return 1L;
}上面的IID_IUnknown指向的不是我的OCX的对象,是系统OLEXXX的,导致我后面ppIface获取的不是我的OCX接口指针,我用MyOcxFaceID代替也没用,我用OLE-VIEW查了一下我的OCX,// 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(0x00000026)]
VARIANT_BOOL SfxInstallMode;
[id(0x00000027), hidden]
BSTR InternalState;
methods:
[id(0x00000028), propget]
BSTR SfxPrompts(short SfxPromptID);
[id(0x00000028), propput]
void SfxPrompts(
short SfxPromptID,
BSTR rhs);
………………
[id(0x0000003b)]
void SfxResetDefaultStrings();
[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);
………………
}; [
uuid(B26F6246-4C7D-11D1-910E-00600807163F),
helpstring("Xceed Zip Control"),
control
]
coclass XceedZip {
[default] dispinterface _DXceedZip;
[default, source] dispinterface _DXceedZipEvents;
};
};请问一下,这到底怎么回到,我想获取我的OCX的虚拟表
解决方案 »
- CString 字符串 中间有多个值,分割问题(VC6.0)
- 网卡混杂模式 及 如何判断网卡是否支持混杂模式??
- 我用InsertMenuItem插入的菜单为什么是灰的?
- is not a member of 'CWinApp'???
- 想写一个类似与电子示波器那样的小软件,大家给个思路吧!
- 关于列举数据库名称的问题
- 问一个消息?
- 简单问题:使Edit显示成下陷需要把Style设置成什么?
- 请问:怎么判断EXCEl中RANGE区域中的是字符串还是公式????
- 为什么我一在windows XP上安装WinCVS或者是mySQL
- 视频播放器多线程死循环处理引起的若干问题
- MFC RichEdit如何实现光标在行末时可以通过鼠标选择文本?
ProgID:XCEEDZIP.XceedZipCtrl.1
这些应该没错
类ID是肯定没错的
路径也正确 C:\Windows\SysWow64\XCDZIP35.OCX
试过,好像也一样
hResult = CoCreateInstance(MyOcxCLSID, NULL,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnknown);
hResult = pUnknown->QueryInterface(IID_IUnknown, (void **)&ppIface);
下面这句是调用之后返回的IID
hResult = CoCreateInstance(MyOcxCLSID, NULL,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnknown);下面这句是利用返回的IID来查询
hResult = pUnknown->QueryInterface(IID_IUnknown, (void **)&ppIface);
请问这错在哪呢
这样查出来难道 ppIface 和 pUnknown 的值不应该时一样的吗?你不是因该查询你自己的接口指针吗:
hResult = pUnknown->QueryInterface(MyOcxFaceID, (void **)&ppIface);ppIface 的声明也有问题:
LPVOID FAR *ppIface = NULL;
1. 不应该是接口的指针,怎么是 LPVOID 指针呢?不过也不是不行,后面可以强转。
2. 怎么是二级指针,&ppIface 岂不是三级指针了。还是没关系,同样可以强转。
hResult = CoCreateInstance(MyOcxCLSID, NULL,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnknown);
来获取