檔案擴展名
outlook中的聯繫人,可以複製貼上到outlook的聯繫人當中,發信時是聯繫人的地址。
The Visual Component Framework
The Visual Component Framework is an advanced C++ application framework that makes it easy to produce powerful C++ applications. The framework is a based on a thoroughly modern C++ design and has built in support for Rapid Application Development (RAD). The framework is designed to be portable over multiple platforms and compilers, so you don't have to lose all that work that went into writing your app for a single platform!
VCF是一個C++編寫的開源項目,全名Visual Component Framework,中文名:可視化組件框架。在這裡先把我這兩天的學習體會記錄一下。
程式框架庫應該可以算是系統級軟體,它提供給用戶一種相對固化的編程方式,進而簡化系統編程。想想最開始在Win3.1下使用SDK開發程式的日子,我們真的應該感謝編出這些框架庫的英雄們。
最早且最流行的框架庫應該是Borland公司的OWL庫(早期的Borland公司推出的每一樣東西都是極品)。再後來也是目前最流行的框架庫就是MFC了,C++Builder中的VCL庫也是非常有特色的。最能評價MFC和VCL的好壞的人,應該是侯捷,他分別寫了《深入淺出 MFC》和《深入淺出VCL》,對每個庫的分析都是非常不錯的。
目前,隨著計算機技術的發展,越來越多的人們對計算機的熟悉,框架庫的數量和類別也越來越多,及外延也越來越廣,以至於在某時,我們不知道某個庫算不算框架庫。就象前幾天分析的WTL(它也變成開源項目了),以及目前名聲在外的STL、BOOST、WXWINDOW等。他們也應該屬於框架庫吧。
軟體
還有三個軟體是非常值得一提的:
1、AGG,一個類似於GDI+的2D圖形庫,寫得非常的好,如果有空,我應該將前段時間分析AGG的經驗寫出來。
2、LOKI庫,就是那個寫《C++設計新思維》的作者提供的,如果有空,我應該將前段時間分析LOKI的經驗寫出來。
3、CPPUNIT庫,一個單元測試的工具。
軟體本身
談了這么多,還是重點講一下VCF本身吧。
我看重並分析VCF的原因,應該是其RTTI功能,其次是它採用了比較先進的C++編程手法。
由於我正在編寫一個開源的工控軟體,想編寫一種通用的屬性處理程式,編了很長時間沒有進展,後來仔細分析了一下我的需求,才發現我想要實現的功能,其實就是一個RTTI的擴展功能,何不直接找一個具有RTTI功能的庫來分析一下呢?於是上網查找,發現VCF對RTTI的實現是最完整、最符合我的需要的。而其它庫,對RTTI的實現,要么不完整,要么實現方法太差。
RTTI的實現,首先應該看語言本身對其的支持程度,象Delphi、C#、VB等語言本身就有Property屬性的,對RTTI 的實現相對就簡單的多,而C++語言本身無支持Property的語法,而在CodeProject上看到的一些實現方法,都不是太好。
昨天花了一晚上將VCF的幫助文檔看完,並分析了其RTTI的實現方法,體會如下:
1、由於VCF還處在開發階段,其幫助文檔很不完善,有許多內容都是空的;
2、VCF的源碼則非常清晰,不愧不大家手筆;
3、VCF對RTTI的實現,包含在FoundationKit的RTTI目錄中,包含了十多個檔案,看其檔案內容,其實現方法應該算是中規中矩的;
4、VCF實現了如下RTTI功能:
A、運行時查找對象所對應的類的名稱、ID、描述;
B、類的繼承關係;
C、Property功能;
D、Event功能;
E、Method功能;
F、為屬性編輯而實現的Enum功能;
G、為屬性編輯而實現的Item功能;
H、運行時基於名稱和ID的動態對象創建功能;
I、Interface功能;
J、運行時類信息的註冊功能;
等等。
5、從功能上講,這非常接近我的需求,但還差如下功能:
A、基於屬性的自動保存和讀入功能(象Delphi那樣);
B、運行時提供屬性的隱藏和恢復功能,雖然目前通過其運行時增加和刪除屬性可以變通實現,但實現起來不方便;
C、屬性的分層;
D、重點屬性的標註;
6、另外,從其實現看,性能可能會是一個非常大的問題,因為其運行時對屬性的訪問都是通過名稱來訪問的,即便是通過UUID訪問,也是通過UUID的字元串訪問的,而實現上,在一個程式運行階段,大部分類屬性的訪問是不需要通過名稱來訪問,而直接可以通過序號或編號來訪問的。如果我想將它拿來用,一定要先對其性能進行重寫。