描述:
对方公司以 OLE 对象的方式将功能提供给我,
成功使用 regsvr32 注册了 DLL 文件,OLE Viewer 中此对象的信息截图请见: http://www.itpub.net/attachment.php?s=&attachmentid=411757&postid=7394300&random=1177850627
源代码如下:
Cn_yh_interface_xnh yhif; // 从类型库中自动生成的 OLE 对象包装类
short nAppCode;
BSTR bstrAppMsg;
try
{
if( !yhif.CreateDispatch( _T("YinHai.XNHInterface") ) )
{
MessageBox( _T("创建 YinHai OLE 对象失败!") );
EndDialog( IDCANCEL );
}
yhif.yh_interface_init( &nAppCode, &bstrAppMsg ); // 有时成功,有时失败
...
......
yhif.yh_interface_call( sJYBH, sJYKZ_XML, sJYSR_XML, &bstrPCBH, &bstrJYLSH, &bstrJYYZM, &bstrJYSC_XML, &lAppCode, &bstrAppMsg ); // 如果上面的那个方法成功调用,那这个方法必定出错
...
......
出错提示:
Test.exe 中的 0x770f4c47 处未处理的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突
补充两点:
1、COM库是这样初始化的:HRESULT hRet = ::OleInitialize( NULL );
2、使用 DELPHI 编写的程序来调用这个 OLE 的所有功能均完成正常,说明 OLE 对象的设计与实现是正确的;
个人觉得可能是线程模型处出了问题,但又不清楚具体原因在哪里,望高手指点!