乐筑天下

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

AutoCAD2011的一个bug?

[复制链接]

16

主题

53

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2010-6-8 15:16:00 | 显示全部楼层 |阅读模式
在创建CAD2011进程时,出现一个问题,通过下列方法已经解决了。
见代码。问题在于:
对于2000到2010版本
通过这段可以成功创建
                    Type objClassType = Type.GetTypeFromProgID(ProgID);
                    //新建2011版本时,报异常,但是acad进程会创建,再转入异常去获取该进程
                    //其他版本不会出现异常,不会转入异常
                    this._App = Activator.CreateInstance(objClassType);
但对于2011则报错,所以想到了下列代码的那段异常处理,不知道还有人是否有这个问题,或者有更好的解决办法?
下列代码已经通过测试,2000值2011个版本均可。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Runtime.InteropServices;
  5. using System.Reflection;
  6. using System.Diagnostics;
  7.     ///
  8.     /// 版本
  9.     ///
  10.     public enum AcadVersion
  11.     {
  12.         ///
  13.         /// AutoCAD2000~2003
  14.         ///
  15.         R15 = 15,
  16.         ///
  17.         /// AutoCAD2004~2006
  18.         ///
  19.         R16 = 16,
  20.         ///
  21.         /// AutoCAD2007~2009
  22.         ///
  23.         R17 = 17,
  24.         ///
  25.         /// AutoCAD2010~2011~更高
  26.         ///
  27.         R18 = 18,
  28.          ///
  29.         /// 其他版本
  30.         ///
  31.         Other=-1
  32.     }
  33. ///
  34.         /// 构造函数,创建系统的默认版本, 使用现有acad进程, 若不存在则启动新的acad进程
  35.         ///
  36.         public AcadApplication()
  37.         {
  38.             ProgID = "AutoCAD.Application";
  39.             AcadApplicationCall();
  40.         }
  41.         ///
  42.         /// 构造函数, 指定版本创建acad,使用现有acad进程, 若不存在则启动新的acad进程
  43.         ///
  44.         public AcadApplication(AcadVersion version)
  45.         {
  46.             ProgID = "AutoCAD.Application" + "." + System.Convert.ToUInt32(version);
  47.             if (version == AcadVersion.Other)
  48.             {
  49.                 ProgID = "AutoCAD.Application";
  50.             }
  51.             AcadApplicationCall();
  52.         }
  53.         private void AcadApplicationCall()
  54.         {
  55.             Process[] p = Process.GetProcessesByName("acad");
  56.             bool exist_acad = false;
  57.             if (p == null || p.Length == 0)
  58.                 exist_acad = false;
  59.             else
  60.                 exist_acad = true;
  61.             if (!exist_acad)
  62.             {
  63.                 try
  64.                 {
  65.                     Type objClassType = Type.GetTypeFromProgID(ProgID);
  66.                     //新建2011版本时,报异常,但是acad进程会创建,再转入异常去获取该进程
  67.                     //其他版本不会出现异常,不会转入异常
  68.                     this._App = Activator.CreateInstance(objClassType);
  69.                     this._IsNewApp = true;
  70.                 }
  71.                 catch (System.Exception e)
  72.                 {
  73.                     //获取acad进程
  74.                     this._App = System.Runtime.InteropServices.Marshal.GetActiveObject(ProgID);
  75.                     this._IsNewApp = true;
  76.                 }
  77.             }
  78.             else
  79.             {
  80.                 try
  81.                 {
  82.                     this._App = System.Runtime.InteropServices.Marshal.GetActiveObject(ProgID);
  83.                     this._IsNewApp = false;
  84.                 }
  85.                 catch
  86.                 {
  87.                     Type objClassType = Type.GetTypeFromProgID(ProgID);
  88.                     this._App = Activator.CreateInstance(objClassType);
  89.                     this._IsNewApp = true;
  90.                 }
  91.             }
  92.         }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-6-8 18:09:00 | 显示全部楼层
这么快就用2011了,呵呵
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:13 , Processed in 0.612494 second(s), 56 queries .

© 2020-2025 乐筑天下

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