- 积分
- 989
- 明经币
- 个
- 注册时间
- 2009-8-14
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
在创建CAD2011进程时,出现一个问题,通过下列方法已经解决了。
见代码。问题在于:
对于2000到2010版本
通过这段可以成功创建
Type objClassType = Type.GetTypeFromProgID(ProgID);
//新建2011版本时,报异常,但是acad进程会创建,再转入异常去获取该进程
//其他版本不会出现异常,不会转入异常
this._App = Activator.CreateInstance(objClassType);
但对于2011则报错,所以想到了下列代码的那段异常处理,不知道还有人是否有这个问题,或者有更好的解决办法?
下列代码已经通过测试,2000值2011个版本均可。-
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Reflection;
- using System.Diagnostics;
-
- /// <summary>
- /// AutoCAD版本
- /// </summary>
- public enum AcadVersion
- {
- /// <summary>
- /// AutoCAD2000~2003
- /// </summary>
- R15 = 15,
- /// <summary>
- /// AutoCAD2004~2006
- /// </summary>
- R16 = 16,
- /// <summary>
- /// AutoCAD2007~2009
- /// </summary>
- R17 = 17,
- /// <summary>
- /// AutoCAD2010~2011~更高
- /// </summary>
- R18 = 18,
- /// <summary>
- /// 其他版本
- /// </summary>
- Other=-1
- }
- /// <summary>
- /// 构造函数,创建系统的默认版本, 使用现有acad进程, 若不存在则启动新的acad进程
- /// </summary>
- public AcadApplication()
- {
- ProgID = "AutoCAD.Application";
- AcadApplicationCall();
- }
- /// <summary>
- /// 构造函数, 指定版本创建acad,使用现有acad进程, 若不存在则启动新的acad进程
- /// </summary>
- public AcadApplication(AcadVersion version)
- {
- ProgID = "AutoCAD.Application" + "." + System.Convert.ToUInt32(version);
- if (version == AcadVersion.Other)
- {
- ProgID = "AutoCAD.Application";
- }
- AcadApplicationCall();
- }
- private void AcadApplicationCall()
- {
- Process[] p = Process.GetProcessesByName("acad");
- bool exist_acad = false;
- if (p == null || p.Length == 0)
- exist_acad = false;
- else
- exist_acad = true;
- if (!exist_acad)
- {
- try
- {
- Type objClassType = Type.GetTypeFromProgID(ProgID);
- //新建2011版本时,报异常,但是acad进程会创建,再转入异常去获取该进程
- //其他版本不会出现异常,不会转入异常
- this._App = Activator.CreateInstance(objClassType);
- this._IsNewApp = true;
- }
- catch (System.Exception e)
- {
- //获取acad进程
- this._App = System.Runtime.InteropServices.Marshal.GetActiveObject(ProgID);
- this._IsNewApp = true;
- }
- }
- else
- {
- try
- {
- this._App = System.Runtime.InteropServices.Marshal.GetActiveObject(ProgID);
- this._IsNewApp = false;
- }
- catch
- {
- Type objClassType = Type.GetTypeFromProgID(ProgID);
- this._App = Activator.CreateInstance(objClassType);
- this._IsNewApp = true;
- }
- }
- }
|
评分
-
查看全部评分
|