乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 42|回复: 2

VS2002+ObjectARX2004 ARX调用ADO ACAD2004直接crash

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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;
}
回复

使用道具 举报

0

主题

64

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
64
发表于 2008-3-1 11:25:00 | 显示全部楼层
粗看一下你代码。。。从我观点来说,如果你是专业程序员,你需要再写得完善一些。你CreateInstance后没有判断是否成功,就直接用指针,相当危险。而且从你的Try,Catch来看,Crash肯定有异常,而不是COM异常,考虑可能是前面创建对象没成功,看一下返回值吧。用指针前判断一下。调一下看看。
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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 版本是多少?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 07:03 , Processed in 0.148460 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表