xmhhh 发表于 2008-2-29 17:01:00

VS2002+ObjectARX2004 ARX调用ADO ACAD2004直接crash

环境组合 WinXP SP2 VS2002+ObjectArx2004+acad2004或acad2006
在stdafx.h中
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace("ARXADO") rename("EOF","adoEOF"),rename("BOF","adoBOF"),rename("EOS","AdoEOS")
using   namespace ARXADO;
#pragma warning(default:4146)
下面为函数调用,在Open时就Crash,找遍网上都没有答案,
if(FAILED(::CoInitialize(NULL)))
{
AfxMessageBox("CoInitialize失败!");
return;
}
_ConnectionPtr m_pConnection;
_RecordsetPtr   m_pRecordset;

m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));   
   
CString m_strConnection;
try
{
m_strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",strMDBFileName);
m_pConnection->Open((_bstr_t)m_strConnection,"","",adModeUnknown);//CAD 崩溃crash
}
catch(_com_error &e)
{
strError.Format("数据库连接失败!原因:%s",e.ErrorMessage());
    return;
}

bluelightcsy 发表于 2008-3-1 11:25:00

粗看一下你代码。。。从我观点来说,如果你是专业程序员,你需要再写得完善一些。你CreateInstance后没有判断是否成功,就直接用指针,相当危险。而且从你的Try,Catch来看,Crash肯定有异常,而不是COM异常,考虑可能是前面创建对象没成功,看一下返回值吧。用指针前判断一下。调一下看看。

xmhhh 发表于 2008-3-8 23:02:00

谢谢您的回答,
我重新判断了CreateInstance是否失败,没有出错,还是在Open时Crash,
在VC6+ObjectArx2002+Acad2002调用Ado都可以
在VS2003+ObjectArx2006+Acad2006调用Ado也可以
唯独VS2002+ObjectArx2004+Acad2004就Crash,
由于VS2003会弹出讨厌的提示框,一直想用VS2002最好
也找到微软升级VS2002的SP1,好不容易才装好(重装系统),
还是不行,对了,我不是专业的程序员,做设计的,对编程感兴趣,希望得到大家的帮助。
对了,你们如用VS2002 版本是多少?
页: [1]
查看完整版本: VS2002+ObjectARX2004 ARX调用ADO ACAD2004直接crash