描述:
有微软的源码:
hr = CoCreateInstance(CLSID_MyPortManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_IRTCPortManager,
reinterpret_cast<void **> (&pPortManager));
其中 pPortManager 是接口:
定义如下:
EXTERN_C const IID IID_IRTCPortManager;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("DA77C14B-6208-43ca-8DDF-5B60A0A69FAC")
IRTCPortManager : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetMapping(
/* [in] */ BSTR bstrRemoteAddress,
/* [in] */ RTC_PORT_TYPE enPortType,
/* [out][in] */ BSTR *pbstrInternalLocalAddress,
/* [out][in] */ long *plInternalLocalPort,
/* [out][in] */ BSTR *pbstrExternalLocalAddress,
/* [out][in] */ long *plExternalLocalPort) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UpdateRemoteAddress(
/* [in] */ BSTR bstrRemoteAddress,
/* [in] */ BSTR bstrInternalLocalAddress,
/* [in] */ long lInternalLocalPort,
/* [in] */ BSTR bstrExternalLocalAddress,
/* [in] */ long lExternalLocalPort) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ReleaseMapping(
/* [in] */ BSTR bstrInternalLocalAddress,
/* [in] */ long lInternalLocalPort,
/* [in] */ BSTR bstrExternalLocalAddress,
/* [in] */ long lExternalLocalAddress) = 0;
};
解决方案1:
你知道什么叫CLSID?就是Class ID,IID就是Interface ID,你连这个都不懂,还是先去把COM学学好再说吧。
解决方案2: 这是获得接口啊。
CoCreateInstance函数的语意:
首先利用参数“CLSID_MyPortManager”创建类厂对象(调用CoGetClassObject),再利用类厂对象的接口指针创建参数“IID_IRTCPortManager”指定的接口,并把接口指针保存到“pPortManager”中,再将类厂对象释放。此后你可以“pPortManager->SomeMethod()”来调用接口方法了。
您可能想查找下面的文章:
- CoCreateInstance和CoCreateInstanceEx的区别??
- 抓狂!看了几天了,CoCreateInstance总是出错!!!!救命啊!
- 请教CoCreateInstanceEx产生E_ACCESSDENIED的原因
- CoCreateInstance的内部实现问题??
- 在DEV-CPP中编译建立快捷方式代码出现incompatibletypeforargument1of`CoCreateInstance'
- 用dll的COM除了cocreateinstance能不能就当普通DLL用loadlibrary调用。
- CoCreateInstanceEx问题
- CoCreateInstance调用成功,CoGetClassObject调用失败,为什么?
- CoCreateInstance调用出错,帮看看!
- CoCreateInstance的问题