狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

運用C#進行AutoCAD的二次開發(二)

運用C#進行AutoCAD的二次開發(二)

更新時間:2019-05-03 文章作者:未知 信息來源:網絡 閱讀次數:

       大家好,今天我繼續給各位介紹利用C#進行AutoCAD的二次開發。在這一講中,主要介紹上一講例子中存在的問題。

         在上一次的例子中我是通過引用AutoCAD 2004 Type Library來進行C#與AutoCAD之間的通信,但這種方法存在兩個致命的缺點。第一個缺點是每次調試程序的時候C#都要重新啟動AutoCAD,如果調試的次數非常多(比如跟蹤錯誤然后調試),那么編程的效率就很低,因為啟動一次CAD還是需要較長的時間。相對于第一個缺點,第二個缺點則更要命。由于.NET本身的問題,Interop.AutoCAD.dll文件(就是通過它才實現了C#與AutoCAD之間的通信)存在著一些bug,因此雖然有時你的代碼是完全正確的,但C#編譯器還是拋出莫名其妙的錯誤。那不是完蛋了嗎?我曾經有一階段就因為這兩個要命的東東差一點放棄了C#而想改學ObjectArx了,呵呵,不過還是運氣好,我偶爾一次在網上看了一篇外國人寫的文章,他專門介紹了這兩個問題的解決辦法。下面就來解決這兩個問題。

         首先來看第二個難題,按以下步驟來進行:

1.        隨便用Visual Studio .NET建立一個C#應用程序,然后按照上一篇文章中的設置加入AutoCAD 2004 Type Library,然后不加入任何代碼,編譯你的程序。

2.        在Visual Studio .NET命令行工具下用ildasm.exe(這個工具可以在Visual Studio .NET安裝光盤中找到)把Interop.AutoCAD.dll文件(這個文件在步驟1中生成的項目的Bin\Release文件夾中)編譯成中間語言Interop. AutoCAD.il。注意:在步驟1中建立的項目的編譯設置為Release模式。

    ildasm.exe /source Interop.AutoCAD.dll /output=Interop. AutoCAD.il

    又要注意了:把ildasm.exe,Interop.AutoCAD.dll放在同一目錄下。

3.在記事本中打開Interop. AutoCAD.il文件,然后查找結尾是“SinkHelper”而開頭為 ".class private auto ansi sealed _DAcad“的語句,把語句中的private 改為public,然后保存Interop. AutoCAD.il文件。

4.使用ilasm.exe把Interop. AutoCAD.il文件編譯為Interop.AutoCAD.dll文件,同樣是在Visual Studio .NET命令行工具下進行。

    ilasm.exe  /resource=Interop.AutoCAD.res /dll Interop.AutoCAD.il /output=Interop. AutoCAD.dll

 Interop.AutoCAD.res文件是在步驟1中生成的。

5.顯然你不愿意每次編寫應用程序時都通過上一篇文章中介紹的方法來加入Interop. AutoCAD.dll,那太麻煩了。你可以用下面的方法來讓程序自動加入該文件:找到C:\Program Files\Microsoft.NET\ Primary Interop Assemblies 文件夾,然后把上面生成的

Interop.AutoCAD.dll文件拷貝進去。     

       好了,第二個問題解決了,接下來看第一個。

       在VBA中,編程者可以使用GetObject函數來獲得當前活動的AutoCAD對象,但在C#中卻沒有,為了這個函數我幾乎把MSDN給翻遍了,然后去各種C#論壇問各位高手,結果都沒得到解決,呵呵,可能國內使用C#的人比較少吧。還是在老外的論壇上看到了一篇就是講這個問題的文章才把這個難題給解決了。使用下面的語句就可以獲得當前活動的AutoCAD對象了:

   (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.16")

     (對于CAD2000和CAD2002,則把16改為15)

當然以上語句必須在AutoCAD打開的情況下才能使用,否則會發生錯誤,對于AutoCAD沒打開的情況,可以使用上一篇文章的方法來處理。完整的連接AutoCAD與C#的源程序如下所示:

using System;

using AutoCAD;

using System.Runtime.InteropServices;

namespace AcadExample

{

   public class AutoCADConnector : IDisposable

   {

      private AcadApplication _application;

      private bool _initialized;

      private bool _disposed;

      public AutoCADConnector()

      {

         try

         {

            // Upon creation, attempt to retrieve running instance

            _application = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.16");

         }

         catch

         {

            try

            {

               // Create an instance and set flag to indicate this

               _application =  new AcadApplicationClass();

               _initialized = true;

            }

            catch

            {

               throw;

            }

         }

      }

      // If the user doesn't call Dispose, the

      // garbage collector will upon destruction

      ~AutoCADConnector()

      {

         Dispose(false);

      }

 

      public AcadApplication Application

      {

         get

         {

            // Return our internal instance of AutoCAD

            return _application;

         }

      }

             

      // This is the user-callable version of Dispose.

      // It calls our internal version and removes the

      // object from the garbage collector's queue.

      public void Dispose()

      {

         Dispose(true);

         GC.SuppressFinalize(this);

      }

 

      // This version of Dispose gets called by our

      // destructor.

      protected virtual void Dispose(bool disposing)

      {

         // If we created our AutoCAD instance, call its

         // Quit method to avoid leaking memory.

         if(!this._disposed && _initialized)

            _application.Quit();

           

         _disposed = true;        

      }

   }

}

利用Visual Studio.net 把上面的程序編譯成一個類庫,你就可以在以后的程序中使用它了,下面的這個例子說明了它的用法。(首先把AcadExample類庫包含在項目中)

using System;

using AcadExample;

using AutoCAD;

namespace ConsoleApplication6

{

   class Class1

   {

      [STAThread]

      static void Main(string[] args)

      {

         using (AutoCADConnector connector = new AutoCADConnector())

         {

            Console.WriteLine(connector.Application.ActiveDocument.Name);

         }

         Console.ReadLine();

      }

   }

}

這個例子是在C#窗口中顯示AutoCAD中當前文檔的標題。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
亚洲黄色成人久久久| 91精品国产91久久久久久最新毛片 | 韩国在线一区| 欧美激情 亚洲a∨综合| av综合在线播放| 成人av影视在线观看| 粉嫩高潮美女一区二区三区| 国产精品一区二区果冻传媒| 国产成人午夜电影网| 国产91丝袜在线播放九色| 国产麻豆日韩欧美久久| 国产精品综合一区二区三区| 国产成人av影院| 国产91在线观看丝袜| av在线综合网| 欧美日韩成人一区二区三区| 国产精品国产精品| 91久久亚洲| 六月婷婷一区| 欧美日韩激情一区二区三区| 日韩欧美高清在线| 亚洲精品在线网站| 中文字幕一区二区三区四区 | 亚洲欧美日韩久久| 亚洲一区二区三区三| 日韩二区三区在线观看| 久久99精品久久只有精品| 国产成人精品三级麻豆| 91老司机福利 在线| 日韩视频不卡| 在线日韩av片| 精品久久久久久久一区二区蜜臀| 国产午夜精品一区二区| 亚洲激情男女视频| 精品一区二区精品| 欧美一区二区三区在线免费观看| 一区二区视频在线观看| 久久蜜桃精品| 欧美一级免费大片| 亚洲色图欧洲色图婷婷| 蜜臀久久久久久久| 94-欧美-setu| 午夜亚洲激情| 日韩视频中午一区| 亚洲美女偷拍久久| 国产美女视频91| 亚洲婷婷免费| 欧美日本一区二区| 中文字幕不卡在线观看| 日本aⅴ精品一区二区三区| 高清不卡一二三区| 国产精品久久久免费| 欧美一区在线视频| 亚洲综合色视频| 国产伦精品一区二区三区免费| 欧美激情综合| 欧美日韩一区中文字幕| 国产免费成人在线视频| 热久久一区二区| 欧美三级黄美女| 欧美喷潮久久久xxxxx| ...av二区三区久久精品| 韩国女主播一区二区三区| 亚洲三级观看| 精品国产一区a| 日本在线观看不卡视频| 国色天香一区二区| 91精品国产麻豆国产自产在线| 亚洲综合在线电影| 91色|porny| 欧美日韩成人高清| 亚洲一区二区三区影院| 欧美在线一二三区| 91精品黄色片免费大全| 亚洲综合色丁香婷婷六月图片| 99视频有精品| 欧美日韩一区二区三区在线| 亚洲乱码中文字幕综合| 91在线播放网址| 欧美久久一二区| 五月综合激情婷婷六月色窝| 国产在线不卡| 精品国产123| 国产精品一区二区三区网站| 色欧美乱欧美15图片| 一区二区在线看| 欧美破处大片在线视频| 精品国产污污免费网站入口| 精品一区二区三区在线观看国产| 一区二区三区四区国产| 亚洲国产经典视频| 午夜激情一区| 久久免费的精品国产v∧| 国产乱子伦一区二区三区国色天香| 蜜桃av综合| 亚洲国产综合人成综合网站| 亚洲国产第一| 国产精品国产成人国产三级| 欧美福利一区| 久久久美女艺术照精彩视频福利播放| 国产精品一区免费在线观看| 欧美日韩一区二区三区四区五区 | 97aⅴ精品视频一二三区| 26uuu成人网一区二区三区| 粉嫩av一区二区三区在线播放 | 精品第一国产综合精品aⅴ| 国产sm精品调教视频网站| 欧美一区二区三区四区五区| 国产一区二区在线免费观看| 欧美日韩性生活| 国产精品自在欧美一区| 91精品国产福利在线观看| 国产盗摄女厕一区二区三区| 日韩欧美一二三区| 99久久精品一区| 国产日韩欧美一区二区三区乱码 | 精品视频在线看| 国产福利91精品一区二区三区| 日韩欧美综合一区| 99久久婷婷国产精品综合| 日本一区二区电影| 亚洲高清123| 天天色天天操综合| 7777精品伊人久久久大香线蕉经典版下载| 九色综合国产一区二区三区| 日韩一区二区三区免费看 | 日本韩国欧美国产| 韩国一区二区视频| 久久久久国产一区二区三区四区 | 午夜日韩激情| 亚洲一区二区三区四区在线| 欧美亚洲一区二区三区四区| 精品一区二区三区欧美| 精品国产乱码久久久久久蜜臀| 欧美日韩爆操| 亚洲韩国精品一区| 欧美一区国产二区| 精品不卡一区二区三区| 午夜电影网一区| 日韩无一区二区| 一本不卡影院| 国产一区二区三区免费播放 | 成人精品一区二区三区中文字幕| 国产精品系列在线| 久久性天堂网| 99精品一区二区| 亚洲国产视频直播| 欧美一个色资源| 亚洲精品免费观看| 国内精品不卡在线| 亚洲天堂成人网| 欧美日韩综合一区| 在线成人黄色| 国产乱淫av一区二区三区| 亚洲色图另类专区| 91精品国产手机| 老妇喷水一区二区三区| 成人毛片视频在线观看| 亚洲日本一区二区| 91麻豆精品国产91久久久久久久久| 欧美jjzz| 麻豆精品视频在线| 亚洲桃色在线一区| 欧美一级欧美一级在线播放| 国产久一道中文一区| 国产成人av自拍| 五月婷婷久久丁香| 国产精品乱码人人做人人爱| 欧美日韩高清在线| 国产一区二区高清视频| 99视频在线精品| 久久精品国产亚洲高清剧情介绍| 国产精品成人一区二区艾草| 欧美一区二区不卡视频| 亚洲欧美日韩另类精品一区二区三区| 91在线视频观看| 国产乱淫av一区二区三区| 午夜精品福利一区二区蜜股av | 盗摄精品av一区二区三区| 午夜视频在线观看一区二区三区| 国产欧美日韩不卡| 91精品国产入口在线| 色综合久久久久久久久| 亚洲午夜精品久久| 99国产精品国产精品久久| 久久国产尿小便嘘嘘尿| 亚洲aⅴ怡春院| 亚洲欧美日韩中文字幕一区二区三区| 精品国产91九色蝌蚪| 欧美精品久久99久久在免费线 | 成人免费小视频| 国产欧美日韩在线观看| 日韩一二在线观看| 欧美美女视频在线观看| 欧美撒尿777hd撒尿| 久久久久久一区| 亚洲欧美日韩精品综合在线观看| 亚洲国产婷婷香蕉久久久久久99| 欧美成人午夜| 欧美日产一区二区三区在线观看|