明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2316|回复: 2

VS2002+ObjectARX2004 ARX调用ADO ACAD2004直接crash

[复制链接]
发表于 2008-2-29 17:01:00 | 显示全部楼层 |阅读模式

环境组合 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;
 }

发表于 2008-3-1 11:25:00 | 显示全部楼层

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

 楼主| 发表于 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 版本是多少?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:34 , Processed in 0.166806 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表