CoCreateInstance 方法的问题
trouble with CoCreateInstance method
我想测试 COM Service(EXE)
但我无法从 CoCreateInstance
中检索到正确的 HRESULT
。
我的 COM 示例是 'ATLCOMService'
Microsoft 示例。如何解决?
客户端代码为:
void main()
{
HRESULT hr;
ISimpleObject *IFirstATL = NULL;
hr = CoInitialize(0);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_SimpleObject, NULL,
CLSCTX_LOCAL_SERVER,
LIBID_ATLCOMServiceLib, (void**)&IFirstATL);
//hr is: E_NOINTERFACE No such interface supported.
hr = CoCreateInstance(CLSID_SimpleObject, NULL,
CLSCTX_INPROC_SERVER,
LIBID_ATLCOMServiceLib, (void**)&IFirstATL);
//hr is: REGDB_E_CLASSNOTREG Class not registered
if (SUCCEEDED(hr))
{
BSTR str;
IFirstATL->HelloWorld(&str);
cout << str << endl;
IFirstATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
CoUninitialize();
}
头文件中的 ID 为:
#ifndef CLSID_DEFINED
#define CLSID_DEFINED
typedef IID CLSID;
#endif // CLSID_DEFINED
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
#endif !_MIDL_USE_GUIDDEF_
MIDL_DEFINE_GUID(IID,
IID_ISimpleObject,0x1B877090,0x76CD,0x4EDE,0x81,0x15,0xEC,
0x4C,0xCD,0x96,0x76,0xF3);
MIDL_DEFINE_GUID(IID, LIBID_ATLCOMServiceLib,0xCC2CA6F0,0x2220,0x4D77,0xBA,
0x46,0x4B,0xCB,0x62,0x15,0x6A,0x28);
MIDL_DEFINE_GUID(IID, DIID__ISimpleObjectEvents,0x7DACF5E9,0x2885,0x4E4E,
0x83,0xDD,0xCA,0x6C,0xC3,0xA8,0x8B,0x6D);
MIDL_DEFINE_GUID(CLSID,
CLSID_SimpleObject,0x388F1C82,0xED00,0x4966,0x95,0x90,
0x02,0xF6,0xB9,0xCC,0xA4,0x1B);
#undef MIDL_DEFINE_GUID
#ifdef __cplusplus
}
#endif
在下面看到注册表实例和服务状态:
注册表 - CLSID:
注册表 - typeid:
和
服务状态:
hr = CoCreateInstance(CLSID_SimpleObject,
NULL,
CLSCTX_LOCAL_SERVER,
LIBID_ATLCOMServiceLib, // <<--- IID_ISimpleObject here?
(void**)&IFirstATL);
//hr is: E_NOINTERFACE No such interface supported.
请注意,第四个参数应该是您请求的接口的 IID
,大概是 IID_ISimpleObject
。 API 返回的错误代码建议您检查您是否请求了正确的接口:E_NOINTERFACE
(或者如果它是正确的,那么服务器可能错误地没有实现它,或者这是一个编组问题) .
我想测试 COM Service(EXE)
但我无法从 CoCreateInstance
中检索到正确的 HRESULT
。
我的 COM 示例是 'ATLCOMService'
Microsoft 示例。如何解决?
客户端代码为:
void main()
{
HRESULT hr;
ISimpleObject *IFirstATL = NULL;
hr = CoInitialize(0);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_SimpleObject, NULL,
CLSCTX_LOCAL_SERVER,
LIBID_ATLCOMServiceLib, (void**)&IFirstATL);
//hr is: E_NOINTERFACE No such interface supported.
hr = CoCreateInstance(CLSID_SimpleObject, NULL,
CLSCTX_INPROC_SERVER,
LIBID_ATLCOMServiceLib, (void**)&IFirstATL);
//hr is: REGDB_E_CLASSNOTREG Class not registered
if (SUCCEEDED(hr))
{
BSTR str;
IFirstATL->HelloWorld(&str);
cout << str << endl;
IFirstATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
CoUninitialize();
}
头文件中的 ID 为:
#ifndef CLSID_DEFINED
#define CLSID_DEFINED
typedef IID CLSID;
#endif // CLSID_DEFINED
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
#endif !_MIDL_USE_GUIDDEF_
MIDL_DEFINE_GUID(IID,
IID_ISimpleObject,0x1B877090,0x76CD,0x4EDE,0x81,0x15,0xEC,
0x4C,0xCD,0x96,0x76,0xF3);
MIDL_DEFINE_GUID(IID, LIBID_ATLCOMServiceLib,0xCC2CA6F0,0x2220,0x4D77,0xBA,
0x46,0x4B,0xCB,0x62,0x15,0x6A,0x28);
MIDL_DEFINE_GUID(IID, DIID__ISimpleObjectEvents,0x7DACF5E9,0x2885,0x4E4E,
0x83,0xDD,0xCA,0x6C,0xC3,0xA8,0x8B,0x6D);
MIDL_DEFINE_GUID(CLSID,
CLSID_SimpleObject,0x388F1C82,0xED00,0x4966,0x95,0x90,
0x02,0xF6,0xB9,0xCC,0xA4,0x1B);
#undef MIDL_DEFINE_GUID
#ifdef __cplusplus
}
#endif
在下面看到注册表实例和服务状态:
注册表 - CLSID:
注册表 - typeid:
和 服务状态:
hr = CoCreateInstance(CLSID_SimpleObject,
NULL,
CLSCTX_LOCAL_SERVER,
LIBID_ATLCOMServiceLib, // <<--- IID_ISimpleObject here?
(void**)&IFirstATL);
//hr is: E_NOINTERFACE No such interface supported.
请注意,第四个参数应该是您请求的接口的 IID
,大概是 IID_ISimpleObject
。 API 返回的错误代码建议您检查您是否请求了正确的接口:E_NOINTERFACE
(或者如果它是正确的,那么服务器可能错误地没有实现它,或者这是一个编组问题) .