本文介绍了使用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,我如何确定为何不支持该接口。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-15 19:21