亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 19:47:49
字體:
來源:轉載
供稿:網友

       大家好,今天我繼續給各位介紹利用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中當前文檔的標題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性猛交xxxx免费看漫画| 成人激情视频网| 欧美性videos高清精品| 97色在线观看免费视频| 亚洲免费中文字幕| 久久人人爽人人爽爽久久| 日韩av成人在线| 国产91在线播放| 97人人模人人爽人人喊中文字| 久久久精品久久久久| 国产在线精品自拍| 北条麻妃一区二区三区中文字幕| 亚洲国产精品va| 久久99国产综合精品女同| 欧美亚洲日本黄色| 亚洲人成电影在线| 欧美成人激情视频| 国产在线视频欧美| 国产精品久久久久不卡| 国产日韩在线观看av| 日韩中文字幕视频在线观看| 久久久亚洲网站| 久久久久久一区二区三区| 一区二区亚洲精品国产| 国产97免费视| 国产精品久久77777| 日本免费一区二区三区视频观看| 亚洲黄页视频免费观看| 久久国产精品影片| 日韩一区av在线| 原创国产精品91| 欧美在线视频网站| 亚洲精品日韩激情在线电影| 国产精品精品视频一区二区三区| 欧美激情欧美激情在线五月| 韩剧1988免费观看全集| 亚洲毛片在线看| 欧美亚洲另类在线| 亚洲自拍中文字幕| 精品国产乱码久久久久酒店| 丝袜亚洲另类欧美重口| 国内免费精品永久在线视频| 成人欧美在线视频| 国产日本欧美一区二区三区在线| 亚洲欧美激情四射在线日| 精品国产999| 国产视频综合在线| 欧美日韩国内自拍| 成人亚洲综合色就1024| 国产精品激情av电影在线观看| 日韩美女主播视频| 成人黄色免费片| 日韩免费在线观看视频| 国产精品久久久久久av下载红粉| 国产日韩在线免费| 亚洲色图13p| 亚洲欧洲日产国产网站| 欧美猛交ⅹxxx乱大交视频| 欧美成人合集magnet| 国产欧美婷婷中文| 性欧美视频videos6一9| 久久久久久久国产精品视频| 国内精品久久久久久中文字幕| 亚洲精品一二区| 亚洲视频第一页| 亚洲美女免费精品视频在线观看| 69国产精品成人在线播放| 国产精品丝袜高跟| 日韩电影中文字幕| 日韩中文在线观看| 国产成人精品综合久久久| 成人免费淫片aa视频免费| 欧美大尺度激情区在线播放| 色99之美女主播在线视频| 日韩电影第一页| 国产日本欧美视频| 国产欧美婷婷中文| 亚洲一区二区免费在线| 欧美亚洲免费电影| 亚洲区中文字幕| 日韩不卡中文字幕| 在线视频中文亚洲| 久久精品国产v日韩v亚洲| 91免费福利视频| 亚洲国产欧美自拍| 亚洲欧洲自拍偷拍| 国产精品美女视频网站| 国产美女高潮久久白浆| 欧美一区三区三区高中清蜜桃| 亚洲国产精品高清久久久| 一区二区三区高清国产| 欧美精品一区二区免费| 欧美日韩成人免费| 91精品成人久久| 国产精品亚洲欧美导航| 7777精品视频| 亚洲a区在线视频| 欧美裸体xxxx| 午夜精品久久久久久99热软件| 亚洲一区二区三区毛片| 97在线观看免费高清| 在线观看日韩专区| 国产91色在线免费| 亚洲图片在线综合| 久久九九国产精品怡红院| 国产精品极品美女粉嫩高清在线| 久久影院中文字幕| 91久久久久久国产精品| 欧美性jizz18性欧美| 欧美精品福利在线| 国产日韩av在线播放| 91av在线国产| 91色视频在线导航| 欧美在线观看网址综合| 国产欧美va欧美va香蕉在| 2019日本中文字幕| 欧美激情aaaa| 亚洲最大的av网站| 少妇高潮久久77777| 国产精品夫妻激情| 久久精视频免费在线久久完整在线看| 在线观看精品自拍私拍| 欧美精品电影在线| 日韩美女av在线| 久久久久久久999精品视频| 国产亚洲精品高潮| 91大神福利视频在线| 91免费高清视频| 91av在线网站| 亚洲日本中文字幕免费在线不卡| 91精品久久久久久久久久久久久久| 国产精品劲爆视频| 日本最新高清不卡中文字幕| 91福利视频网| 538国产精品视频一区二区| 国产精品美女在线| 日本高清不卡在线| 日韩欧美一区二区在线| 久久6免费高清热精品| 777777777亚洲妇女| 久久在线视频在线| 日韩在线播放视频| 日本精品中文字幕| 成人黄色生活片| 亚洲精品久久久久久下一站| 色婷婷综合成人av| 海角国产乱辈乱精品视频| 亚洲国产精品嫩草影院久久| 欧洲永久精品大片ww免费漫画| 久久偷看各类女兵18女厕嘘嘘| 国产精品精品视频| 色综合伊人色综合网| 欧美激情一区二区三区在线视频观看| 亚洲精品视频在线观看视频| 亚洲天堂av电影| 久久免费精品日本久久中文字幕| 日韩免费观看在线观看| 欧美成人午夜影院| 亚洲精品美女在线观看| 久热精品视频在线| 在线精品视频视频中文字幕| 亚洲欧美日韩精品久久| 国产在线观看一区二区三区| 91精品国产自产在线老师啪|