有一段时间,我实现的COM服务将进入一种状态,我的C ++客户端应用程序将因E_NOINTERFACE
错误而无法创建COM对象。客户端应用程序是我经常运行的一次性运行(非持久性).exe。
首先,COM服务在大多数情况下都能正常工作,但突然CoCreateInstance()
将开始返回E_NOINTERFACE
。为了增加混乱,我编写的VBScript继续成功运行并创建COM对象而没有任何问题。
如果我重新启动COM服务,一切都将恢复正常,我的C ++应用程序将重新开始工作。
以下是我运行的C ++和VBScript片段。
C ++
ISampleCom *MyComObj;
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
// Create COM object
hr = CoCreateInstance(CLSID_SampleCom, 0, CLSCTX_LOCAL_SERVER, IID_ISampleCom, (void**)&MyComObj);
if(FAILED(hr))
printf("\r\nFailed to create COM object.");
的VBScript
dim version
set mycomobj = CreateObject("MyCom.Sample")
mycomobj.GetVersion(version)