2012-02-05 68 views
2

目前我創造我自己的智能感知信息,並稍微不確定的點:拔出從DLL文件/頭文件

的VS智能感知可以考慮引用的DLL,並從中拔出命名空間,類等等。它是否用反射來做到這一點?如果我添加一個用java編寫的DLL(如果可以完成的話)會怎麼樣?如何添加一個用java編寫的DLL(如果可以這樣做的話?)

適用於C++,是否包含你的#include的intellisense簡單掃描頭文件,並從中找到可用的命名空間,類等?

我不完全不在乎在Visual Studio中的具體實現智能感知的,但我感興趣的是如何獲得它的數據。

+2

.Net和Java和C++對彼此都無能爲力。你有什麼特別的問題? – SLaks 2012-02-05 23:16:08

+1

我相當確定你將不得不掃描標題。從二進制C++獲取數據會變得困難(大多數東西在編譯時會消失)。 – Lalaland 2012-02-05 23:22:11

+0

VC++ IDE只是解析頭文件,它不會查看任何二進制文件。雖然VC#的確如此,但僅僅是因爲.NET程序集幾乎完全不同於普通的可執行程序。 – 2012-02-05 23:25:16

回答

1

編譯的.NET程序集和Java類包含有關它們定義的類和符號的所有元信息。沒有什麼像.h或.lib文件需要鏈接到它們。對於這些類型的模塊,可以從中直接提取大量的信息。

我不知道如果Visual Studio 使用反射從託管程序集中讀取元數據,但反射無疑是一種適用於此情況的正確機制。但是還要注意,VS顯示的信息比直接包含在程序集中的信息更多,即/// doc-comments。這些可能來自解決方案中其他項目的源文件,以及組件附帶的單獨的.XML文件。

對於C和C++,事情是不同的。單獨的DLL中幾乎沒有可用的信息。有導出符號,但它們通常不表示符號是函數還是隻是一個extrn,函數需要多少個參數以及哪些類型。 C++使用所謂的「損壞」名稱,從中可以獲得一些信息。但是關於庫的大多數信息都來自頭文件。據我所知,VS分析代碼中包含的項目和.h文件的sopurce文件以獲得智能感知數據庫。有宏(#define's),以及內聯和模板類和函數,它們完全不在DLL外部符號中。

對於託管和非託管組件,有時調試信息PDB文件可用。再次,我不確定,但我認爲VS並沒有將它們用於智能感知。這並不意味着你不應該這樣做。其中包含有關外部變量,類,函數和方法的擴展信息。總而言之,沒有「標準」智能感知方法,您可能應該考慮使用多個來源來提供符號來源信息。

不幸的是,我不知道很多關於Java給予了詳細的回答你的問題的一部分。此外,還有一個流行的IDE框架稱爲Eclipse,但我沒有仔細研究過它。必須有一些有趣的部分隱藏在那裏,但做你自己的研究。

一些有用的參考資料:

  1. Visual Studio SDK。即使你不擴展視覺工作室,你也可能想閱讀它的文檔。它有一個關於智能感知的部分。另外,請看開源IDE,如Eclipse和#develop

  2. System.Diagnostics.SymbolStore Namespace包含訪問PDB文件的類。在非託管的世界中,使用DbgHelp library,這是Windows SDK的一部分。

  3. 一種實用程序稱爲Depends是Win32的SDK的一部分,並且分別是現在avalable。它顯示了由非託管DLL定義的外部信息。This SO discussion揭示了一些以編程方式訪問這些信息的方法。在從PE導出目錄中提取它們之後,DbgHelp包含用於解除C++名稱的函數。

+0

感謝您的答覆,這正是我正在尋找。對不起,原來的帖子中有任何混淆 – LynchDev 2012-02-06 01:41:59