本文介绍了使用COM,我如何确定为何不支持该接口。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
据我所知,这应该有效:::
ITypeLib Viewer输出:
库MyServerLib
{
// TLib:OLE Automation:{00020430-0000-0000-C000-000000000046}
importlib(stdole2.tlb);
//转发声明此typelib
接口IOPCServer中定义的所有类型;
接口IOPCBrowseServerAddressSpace;
...
[
uuid(E31E5782-636C-11D2-B326-0000A0080AC8),
helpstring(OPC Server Class)
]
coclass OPCServer {
[default] interface IOPCServer;
接口IOPCBrowseServerAddressSpace;
};
[
odl,
uuid(39C13A4D-011E-11D0-9675-0020AFD8ADB3)
]
interface IOPCServer:IUnknown {
HRESULT _stdcall AddGroup(.....
};
...
[
odl,
uuid(39C13A4F-011E-11D0-9675- 0020AFD8ADB3)
]
接口IOPCBrowseServerAddressSpace:IUnknown {
HRESULT _stdcall QueryOrganization([out] tagOPCNAMESPACETYPE * pNameSpaceType);
....
};
....
};
C ++代码::>
const CLSID CLSID_OPCServer = {0xE31E5782,0x636C,0x11D2,{0xB3,0x26,0x00,0x00,0xA0,0x08,0x0A,0xC8}};
const IID IID_IOPCBrowseServerAddressSpace = {0x39c13a4f,0x011e,0x11d0,{0x96 ,0x75,0x00,0x20,0xaf,0xd8,0xad,0xb3}};
hr = CoInitializeEx(NULL,COINIT_MULTITHREADED);
hr = CoCreateInstance(CLSID_OPCServer,NULL,CLSCTX_SERVER,
IID_IUnknown,(void **)&(p2sPtrs-> pServer));
//这是成功的并获得了一个pServer指针
hr = p2sPtrs-> pServer-> QueryInterface(IID_IOPCBrowseServerAddressSpace,(void **)& m_spBrowse);
//这个失败,没有支持这样的界面。
如何确定问题所在?
一切看起来都对我不错。
是否缺少一步?
我有什么试过:
尝试初始化
COINIT_APARTMENTTHREADED
没有区别。
解决方案
From my knowledge, this should work:::
ITypeLib Viewer output:
library MyServerLib { // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} importlib("stdole2.tlb"); // Forward declare all types defined in this typelib interface IOPCServer; interface IOPCBrowseServerAddressSpace; ... [ uuid(E31E5782-636C-11D2-B326-0000A0080AC8), helpstring("OPC Server Class") ] coclass OPCServer { [default] interface IOPCServer; interface IOPCBrowseServerAddressSpace; }; [ odl, uuid(39C13A4D-011E-11D0-9675-0020AFD8ADB3) ] interface IOPCServer : IUnknown { HRESULT _stdcall AddGroup(..... }; ... [ odl, uuid(39C13A4F-011E-11D0-9675-0020AFD8ADB3) ] interface IOPCBrowseServerAddressSpace : IUnknown { HRESULT _stdcall QueryOrganization([out] tagOPCNAMESPACETYPE* pNameSpaceType); .... }; .... };
C++ code::>
const CLSID CLSID_OPCServer = {0xE31E5782,0x636C,0x11D2,{0xB3,0x26,0x00,0x00,0xA0,0x08,0x0A,0xC8}}; const IID IID_IOPCBrowseServerAddressSpace = { 0x39c13a4f,0x011e,0x11d0,{ 0x96,0x75,0x00,0x20,0xaf,0xd8,0xad,0xb3 } }; hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); hr = CoCreateInstance( CLSID_OPCServer, NULL, CLSCTX_SERVER, IID_IUnknown, (void **) &(p2sPtrs->pServer) ); // this was successful and got a pServer pointer hr = p2sPtrs->pServer->QueryInterface(IID_IOPCBrowseServerAddressSpace, (void **)&m_spBrowse); // this fails with 'No such interface supported.'
How do I determine what the issue is?
Everything looks correct to me.
Is there a step missing?
What I have tried:
Tried initializing
COINIT_APARTMENTTHREADED
with no difference.
解决方案
这篇关于使用COM,我如何确定为何不支持该接口。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!