狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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视频
丝袜美腿高跟呻吟高潮一区| 日韩av在线发布| 免费视频一区| 久久精品一区| 欧美午夜在线观看| 色屁屁一区二区| 91美女福利视频| 久久亚洲欧美国产精品乐播| 国产欧美亚洲一区| 国产福利视频一区二区三区| 中文字幕亚洲不卡| 精品欧美一区二区三区精品久久| 国模吧视频一区| 国产成人8x视频一区二区| 图片区小说区区亚洲影院| 久久精品亚洲精品国产欧美| 欧美日韩免费电影| 91黄视频在线| 91极品美女在线| 成人免费在线播放视频| 麻豆精品视频在线| 国产综合激情| 精品va天堂亚洲国产| 日韩在线观看一区二区| 91首页免费视频| 欧美一区二区三区电影| 亚洲韩国精品一区| 中文有码久久| 国产人妖乱国产精品人妖| 奇米777欧美一区二区| av成人毛片| 欧美日本乱大交xxxxx| 亚洲欧美日韩久久| 亚洲国产日韩精品| 国产在线不卡视频| 欧美精品福利| 亚洲国产婷婷香蕉久久久久久99| 97精品久久久久中文字幕| 国产一区观看| 5566中文字幕一区二区电影| 国产精品成人一区二区艾草| 免费av网站大全久久| 女生裸体视频一区二区三区| 欧美高清日韩| 日韩一本二本av| 天涯成人国产亚洲精品一区av| 久久99精品久久久久久国产越南| 午夜a成v人精品| 亚洲另类在线制服丝袜| 亚洲激情男女视频| 亚洲精品视频免费观看| 亚洲精品乱码视频| 五月天丁香久久| 国产精品99久久久久久有的能看 | 欧美一区久久| 欧美亚洲三级| 精品裸体舞一区二区三区| 极品瑜伽女神91| 国产精品888| 国产精品激情| 国产日韩欧美一区二区| 国产精品99免费看| 粉嫩aⅴ一区二区三区四区五区 | 欧美aⅴ一区二区三区视频| 五月婷婷另类国产| 亚洲欧美一区在线| 日韩一区二区在线看| 日韩精品91亚洲二区在线观看| 91视视频在线直接观看在线看网页在线看| 国产视频一区在线观看一区免费| 久久嫩草精品久久久久| 国产传媒日韩欧美成人| 欧美性做爰猛烈叫床潮| 日韩成人一区二区三区在线观看| 国产精品久久久久9999高清| 亚洲一区二区视频在线观看| 国产九区一区在线| 精久久久久久久久久久| 亚洲人成网站精品片在线观看| 欧美亚洲国产bt| 一区二区精品在线| 91丨国产丨九色丨pron| 激情欧美日韩一区二区| 婷婷开心久久网| 一区二区三区四区国产精品| 26uuu国产电影一区二区| 欧美精品丝袜久久久中文字幕| 国产精品一二| 99精品国产福利在线观看免费| 91麻豆高清视频| www.久久精品| 日韩成人免费看| 欧美高清一级片在线观看| 欧美91大片| 日韩中文欧美在线| 91精品国产高清一区二区三区蜜臀| 国产精品一品二品| 亚洲视频中文字幕| 欧美日高清视频| 一区二区高清| 暖暖成人免费视频| 免播放器亚洲一区| 国产精品乱码人人做人人爱| 91行情网站电视在线观看高清版| 不卡电影一区二区三区| 亚洲综合av网| 国产日韩一区二区| 国产欧美日韩综合一区在线播放| 国产成a人亚洲| 一区二区三区成人在线视频| 欧美午夜精品一区| 99精品国产99久久久久久白柏| 免费av成人在线| 成人毛片在线观看| 韩国成人在线视频| 欧美日韩大陆在线| 91免费在线视频观看| 国产精品女上位| 国产欧美1区2区3区| 欧美三级乱人伦电影| 亚洲一区二区精品在线观看| 国产一区二区三区无遮挡| www.爱久久.com| 成人av小说网| 92国产精品观看| 女女同性女同一区二区三区91| 99久久精品国产观看| 成人av电影在线| 欧美日韩亚洲一区| 国产一区二区三区自拍| 一本色道久久99精品综合| 99久久99久久免费精品蜜臀| 欧美男生操女生| 亚洲日韩欧美一区二区在线| 国产真实乱子伦精品视频| 在线观看亚洲视频啊啊啊啊| 4438x成人网最大色成网站| 一区在线播放视频| 99久久亚洲一区二区三区青草 | 精品一区二区免费在线观看| www.日韩精品| 欧洲一区二区av| 青青草原综合久久大伊人精品优势| 在线观看一区视频| 亚洲精品日韩综合观看成人91| 91麻豆精品视频| 欧美日韩美女一区二区| 久久久欧美精品sm网站 | jlzzjlzz亚洲女人18| 国产999精品久久久久久绿帽| 国产在线播精品第三| 91网站黄www| 欧美亚洲精品一区| 精品少妇一区二区三区| 亚洲一卡二卡三卡四卡| 激情国产一区二区| 亚洲成色最大综合在线| 欧美影院一区二区| 欧美国产97人人爽人人喊| 国产美女精品一区二区三区| 一区二区三区偷拍| 亚洲国产经典视频| 麻豆国产精品官网| 精品一区二区久久| 你懂的成人av| 久久99精品久久久久久国产越南 | 国产色一区二区| 欧美韩日一区二区三区四区| 性欧美大战久久久久久久久| 激情综合网av| 99久久99久久久精品齐齐| 欧美乱熟臀69xxxxxx| 国产日韩欧美精品一区| 国内成人精品2018免费看| 777欧美精品| 亚洲一区二区三区四区五区黄| 不卡av在线免费观看| 老司机精品视频网站| 午夜国产精品一区| 一本一道久久a久久精品综合蜜臀| 久久婷婷成人综合色| 成人一区二区三区在线观看| 亚洲国产岛国毛片在线| 日韩午夜av| 久久99精品国产麻豆婷婷| 精品成人一区二区三区| 欧美日韩成人一区二区三区| 国产精品国产自产拍高清av | 色视频欧美一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 国产一区二区三区国产| 91国偷自产一区二区三区成为亚洲经典 | 婷婷丁香久久五月婷婷| 久久国产精品久久精品国产 | 亚洲精品国产一区二区精华液| 国产欧美精品久久| 久久国产成人午夜av影院| 色88888久久久久久影院野外| 好吊日精品视频| 成人动漫av在线|