為什麼使用C 託管擴充套件

2021-04-07 01:40:52 字數 2143 閱讀 2088

為什麼使用c++託管擴充套件

清華大學出版社論壇

微軟既要考慮visual c++的相容性,又要讓傳統c++語言具備足夠的能力開發.net應用程式,於是在新版本的visual c++中,引入了c++託管擴充套件。

在整個visual studio開發套件中,微軟為了迎合.net應用程式開發模式的要求,幾乎對每個工具都作了或大或小的改進。其中,vb的變革力度應用微軟各種軟體產品之最。但是太大的變革往往會帶來相容性問題,特別是新版本的vb宣稱其只能開發託管的應用程式(也就是.net應用程式),所以對開發人員來講,這肯定意味著過去使用vb編寫的**在新版本vb上進行重新構造的難度會很大。vb以前就在版本相容性方面有著不如人意的歷史—— 在vb4、vb5、vb6之間進行公升級,會讓開發人員付出很多辛苦。現在,由於vb的體系進行了很大的改動,所以版本相容性問題會更嚴重一些—— 筆者已經在微軟幾個官方討論組中看到了一些開發人員和相關人士對此表示出來的擔憂,並看到不止乙個開發人員對新版本vb在相容性方面存在問題提出質疑甚至是批評。

作為微軟開發套件中的另一位「元老」—— visual c++,我們對其提供完整的.net開發支援感到高興的同時也同樣擔心它的版本相容性問題—— visual c++該不會也和vb一樣,徹底與mfc和atl**吧?答案是:不可能!

這是乙個令人振奮的回答,下面就讓我們花一點時間來了解新版本visual c++是怎樣處理變革和向下相容之間的關係的。

由於visual c++的歷史背景不但比vb要長,而且,在開發範圍上,visual c++通常要比vb廣泛得多。對於使用visual c++構造出來的應用程式,其主要目標是使它的執行效率(而不是軟體的開發效率)盡可能地高,所以,這就是為什麼微軟要對幾個主要支援類庫做出比較特別設計的原因。這些特別的設計有包含在mfc中的巨集,以及處理windows標準訊息時的訊息對映機制(也主要是由若干個巨集來實現),在atl中也有許多類似的設計。在很多對軟體效率使用要求比較高的場合,如影象處理軟體或字處理軟體等等工具類軟體中,mfc幾乎成了世界級廠商完成開發工作的首選。至少就目前軟體、硬體水平的發展來看,.net應用程式的執行效率和mfc編寫並經過c++編譯器編譯而來的本機**應用程式的效率是沒有辦法相提並論的。所以,無論從保障已有投資還是保證應用程式工作效率的角度來講,mfc還有其強大的生命力。

另外,之所以微軟對vb進行那樣大的改革,是因為微軟認為vb通常適用於快速應用程式領域,這些領域一般包含對效率要求不是很高的資料庫前端應用程式或後端業務元件。當更為優秀的.net框架發布之後,微軟就為vb換了換「心臟」,以期大幅度增強vb的功能,使之成為快速開發.net應用程式的主力軍。而對於visual c++這樣乙個在許多傳統領域依然寶刀不老的工具,當然不能急躁冒進,將已有的功能丟棄。所以,在新版本的visual c++中,採用了一種更為折衷的方法—— 擴充套件現有c++語言,讓visual c++在編寫純粹的.net應用程式的同時,依然可以利用其成熟的技術進行未託管的應用程式的開發。

在實際工作中,如果開發人員遇到下列開發需求,使用託管擴充套件將是最佳選擇:

● 需要快速地將未託管的c++應用程式合併到.net框架中

對於以前開發的傳統未託管的c++應用程式,因為開發人員可以在同乙個應用程式中(甚至是在同乙個檔案中)混合使用兩種型別的**,所以託管擴充套件為實現兩種**的無縫轉化提供了一種平滑的轉化方式。

● 需要讓任何一種與.net框架相容的語言可以訪問c++元件

託管擴充套件支援從任何.net 框架相容語言來呼叫c++類。呼叫之所以可以實現,是因為使用託管擴充套件可以編寫簡單的包裝類來對訪問方暴露對應的c++類和方法。這些包裝類都是託管的,並可以從其他.net框架相容程式中進行呼叫。在呼叫過程中,外包類在託管的類和未託管的類之間扮演了對映層的角色—— 它讓方法呼叫直接傳遞到未託管的類中。另外,需要特別指出的是,託管擴充套件支援對任何未託管的dll或庫的呼叫。

● 需要從未託管的**中訪問.net框架類

為了得到更多的功能,在未託管的**中,可以訪問.net 框架中的類。使用託管擴充套件,可以從c++**中直接建立、呼叫乙個.net 框架類。在實際程式設計中,可以像處理普通未託管的c++類一樣對待對託管的類的處理。另外,在.net框架中提供了對未託管的com的呼叫支援,可以編寫未託管的**直接訪問。

因為託管的**和未託管的**各有優點,在實際工作中,開發人員可以根據專案的實際情況,靈活選擇兩者的使用。在某些追求訪問效率的情況下,通過.net 框架提供的com介面進行訪問可以收到比較好的執行效果;而在某些需要快速完成任務的情況下,利用.net 框架提供的簡便性進行工作會讓開發人員倍感輕鬆。

c 為什麼要使用介面

c 為什麼要使用介面?通俗的講,就是為了降低耦合度。給大家看乙個我見過的很搞笑的例子。看看下面的程式 乙個學校裡邊,有兩種人 學生 老師。他們都要吃飯和睡覺。public inte ce i人 public class 學生 i人 public void 睡覺 其他特有方法,比如泡妞 打遊戲 pub...

使用託管C 粘合C 與C

最近使用c 寫了乙個圖形庫,想要再給這個圖形庫做乙個編輯器,這就需要選擇乙個做視窗介面的框架,在windows上可以選擇的有mfc,qt,winform和wpf等等,mfc不想了,比較難搞定,qt不錯,還能跨平台,但是想做的快以及漂亮一點不容易,winform和wpf做出來的東西好看而且能很快做出來...

C 中為什麼要使用斷言

斷言assert是僅在debug下有效的巨集,當其中的條件為假時,觸發錯誤提示。使用斷言的目的是捕捉不應該發生的非法情況。注意 不要混淆非法情況與錯誤情況之間的區別,後者的出現是因為 錯誤,是一定要作出處理的。如何使用 1 在函式的入口處,使用斷言檢查引數的有效性 合法性 2 在編寫函式時,要進行反...