小弟初学COM,碰到如下问题。
HRESULT hr;
::CoInitialize(NULL);
CXLogItemBase *test = new CXLogItemBase();
if(FAILED(hr))
{
cout << "Com Initialize failed";
}
Imath *pm;
IXSession *p;
hr = CoCreateInstance(CLSID_XSession, NULL, CLSCTX_LOCAL_SERVER, IID_IXSession, (void**)&p); if(FAILED(hr))
{
cout.setf(ios::hex, ios::basefield);
cout << "Failed to create server instance. hr = " << hr << endl;
return -1;
}
cout << "Instance created" << endl; hr = p->WriteLog((IXLogItemBase *)test);
//hr返回的是c0000005,访问异常,
这是输出信息:ClientTest.exe 中的 0x769c4379 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突CXLogItemBase 继承 IXLogItemBaseWriteLog的定义为
[helpstring("Method WriteLog")]
HRESULT WriteLog([in] IXLogItemBase *msg);请问这是什么原因啊
HRESULT hr;
::CoInitialize(NULL);
CXLogItemBase *test = new CXLogItemBase();
if(FAILED(hr))
{
cout << "Com Initialize failed";
}
Imath *pm;
IXSession *p;
hr = CoCreateInstance(CLSID_XSession, NULL, CLSCTX_LOCAL_SERVER, IID_IXSession, (void**)&p); if(FAILED(hr))
{
cout.setf(ios::hex, ios::basefield);
cout << "Failed to create server instance. hr = " << hr << endl;
return -1;
}
cout << "Instance created" << endl; hr = p->WriteLog((IXLogItemBase *)test);
//hr返回的是c0000005,访问异常,
这是输出信息:ClientTest.exe 中的 0x769c4379 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突CXLogItemBase 继承 IXLogItemBaseWriteLog的定义为
[helpstring("Method WriteLog")]
HRESULT WriteLog([in] IXLogItemBase *msg);请问这是什么原因啊
解决方案 »
- 求助,请大神指点。
- CWinThread线程挂起后,怎样销毁线程?这时PostThreadMessage好像没反应了。
- Shockwave Flash Object控件
- 请问怎么能够禁止窗口右侧的滑动条,使其不能滑动
- 关于音频pcm解码问题
- 奇怪的问题:在控件中调用MoveWindow为什么无效?
- 为何CListCtrl :: GetNextItem(-1, LVNI_SELECTED)会返回 -1?
- 怎么样在VC里编制能运行在DOS6.22和WINDOWS98DOS下的程序?
- VC读取excel的xls文件
- 求助:
- 关于毕设问题 传输层协议能同时用udp和tcp嘛 ?
- 终于购买了自己的正版杀毒软件
如果这么调用
hr = p->WriteLog(NULL);
就调用成功了
那应该是IXSession内部调用IXLogItemBase接口出错。贴些你的IXLogItemBase接口看看。
HRESULT _hr = raw_WriteLog(msg);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
}
就是调用raw_WriteLog出现了问题
再想跟进去,就跟不进去了,这个函数应该是ATL自动生成的吧interface IXLogItemBase : IUnknown
{
[helpstring("Method GetFirstField")]
HRESULT GetFirstField([out, string] BSTR *key, [out, string] BSTR *value) ;
[helpstring("Method GetNextField")]
HRESULT GetNextField([out, string] BSTR *key, [out, string] BSTR *value);
};
这是接口定义
{
return S_OK;
}STDMETHODIMP CXLogItemBase::GetFirstField(BSTR *key, BSTR *value)
{
return S_OK;
}
{
return E_NOTIMPL;
}STDMETHODIMP CXLogItemBase::GetFirstField(BSTR *key, BSTR *value)
{
return E_NOTIMPL;
}
我不想使用链接点去做。
请问我在MFC程序中添加这个接口的实现应该怎么做谢谢