AutoCAD.NET二次開發:創建自定義菜單的兩種方法比較


目前我已經掌握的創建CAD菜單方法有兩種:

COM方式:

http://www.cnblogs.com/bomb12138/p/3607929.html

CUI方式:

http://www.cnblogs.com/bomb12138/p/3600842.html

 

  從程序復雜度來看,COM方式更簡單一些,CUI方式較復雜。

  從版本特性來看,COM方式更通用一些,CUI方式僅支持CAD2007+的版本。

  從兼容性來看,基本一樣;在測試程序中,對於CUI方式,我引用的是CAD2008的類庫,而最后生成的程序也可以在CAD2007中正常運行;而對於COM方式,這里要介紹一下CAD提供的COM組件了。CAD的COM組件基本上是每三年一個系列,比如04、05、06提供的是V16系列,07、08、09是V17系列,每個系列中僅注冊最高版本的COM組件,比如我電腦上安裝離CAD2007和CAD2008,但是僅注冊了CAD2008的組件,高版本的COM可以兼容低版本。在我的測試程序中,引用的是AutoCAD 2008 Type Library,起初引用屬性中的“復制本地”為False,這個時候生成的DLL拿到了虛擬機中測試,出現了以下情況:

  在虛擬機A中,僅安裝了AutoCAD 2007,用CAD加載我的DLL,會崩潰,提示找不到程序集。

  在虛擬機B中,僅安裝了AutoCAD 2009,用CAD加載我的DLL,運行正常。

  之后,我把引用屬性中的“復制本地“改為了True,把我的DLL和引用到的Autodesk.AutoCAD.Interop.dll一起復制到兩個虛擬機中,都可以正常運行。

  因此,在編譯CAD程序時,如果在創建項目時,引用每個系列中的最低版本類庫,則理論上,生成的DLL可以兼容三個版本。

  從自動加載實現來看,COM方式配合注冊表控制、IExtensionApplication接口實現可以很好地實現菜單的自動加載;而CUI必須用cuiload命令進行加載,所以要實現其自動加載,必須在IExtensionApplication接口中向CAD發送lisp命令來調用cuiload(網上到處都說可以用這種方法實現,但是我不停在嘗試,從來未成功,所以不得不懷疑其可行性)。

 

  最終個人認為,還是Com方式較優,雖然這樣一來,需要為每個版本的CAD都發布一次程序(因為引用到了COM),但也許我們的程序里還有其他地方會用到COM呢。

  而且事實上,我們僅需要一套代碼,通過為每個版本的CAD創建一個項目,然后將代碼以鏈接的方式加載到項目中,就可以很方便地發布不同版本的程序集了。如果程序中在些地方不同版本CAD中的寫法支持不一樣的話,可以用預編譯指令進行控制。

  以鏈接方式加載代碼的方式如下:

  在項目中點鼠標右鍵,選擇“添加現有項”,然后選中要添加的代碼文件,點“添加”按鈕旁的向下箭頭,即可找到“添加為鏈接”,以這種方式添加的代碼文件像桌面快捷方式一樣左下角有個箭頭。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM