VS2002+ObjectARX2004 ARX调用ADO ACAD2004直接crash
<p>环境组合 WinXP SP2 VS2002+ObjectArx2004+acad2004或acad2006</p><p>在stdafx.h中</p><p>#pragma warning(disable:4146) <br/>#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace("ARXADO") rename("EOF","adoEOF"),rename("BOF","adoBOF"),rename("EOS","AdoEOS")</p><p>using namespace ARXADO;<br/>#pragma warning(default:4146)<br/></p><p>下面为函数调用,在Open时就Crash,找遍网上都没有答案,</p><p>if(FAILED(::CoInitialize(NULL))) <br/> {<br/> AfxMessageBox("CoInitialize失败!");<br/> return;<br/> }<br/> _ConnectionPtr m_pConnection;<br/> _RecordsetPtr m_pRecordset; <br/> <br/> m_pConnection.CreateInstance(__uuidof(Connection));<br/> m_pRecordset.CreateInstance(__uuidof(Recordset)); <br/> <br/> CString m_strConnection;<br/> try<br/> {<br/> m_strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",strMDBFileName);<br/> m_pConnection->Open((_bstr_t)m_strConnection,"","",adModeUnknown);//CAD 崩溃crash<br/> }<br/> catch(_com_error &e)<br/> {<br/> strError.Format("数据库连接失败!原因:%s",e.ErrorMessage());<br/> return;<br/> }</p> <p>粗看一下你代码。。。从我观点来说,如果你是专业程序员,你需要再写得完善一些。你CreateInstance后没有判断是否成功,就直接用指针,相当危险。而且从你的Try,Catch来看,Crash肯定有异常,而不是COM异常,考虑可能是前面创建对象没成功,看一下返回值吧。用指针前判断一下。调一下看看。</p> <p>谢谢您的回答,</p><p>我重新判断了CreateInstance是否失败,没有出错,还是在Open时Crash,</p><p>在VC6+ObjectArx2002+Acad2002调用Ado都可以</p><p>在VS2003+ObjectArx2006+Acad2006调用Ado也可以</p><p>唯独VS2002+ObjectArx2004+Acad2004就Crash,</p><p>由于VS2003会弹出讨厌的提示框,一直想用VS2002最好</p><p>也找到微软升级VS2002的SP1,好不容易才装好(重装系统),</p><p>还是不行,对了,我不是专业的程序员,做设计的,对编程感兴趣,希望得到大家的帮助。</p><p>对了,你们如用VS2002 版本是多少?</p>
页:
[1]