2013-03-12 76 views
0

我必須開發一個測試應用程序來測試圖形驅動程序的一些功能。 通過使用Microsoft公開的標準,如DXVAHD.h,DXVA2Api.h(Directshow)和其他Microsoft APis。由於C#中的編碼與C++相比非常簡單,我們爲什麼不能使用C#代替。 這是因爲我們不能在C#中使用頭文件(因爲有一個包的概念)?爲什麼使用C++而不是C#來進行驅動程序級編程(系統級編程)

任何人都可以讓我知道爲什麼人們比C#更喜歡C,C++,當涉及到系統級編程時。 ?任何鏈接或學習資料W.R.T.這些將不勝感激。

在此先感謝。

+0

聞起來像題外話。 – 2013-03-12 08:41:58

+0

指針...你通過引用傳遞對象而不是複製對象 – Sayse 2013-03-12 08:42:24

+0

@Sayse in c#對象默認通過引用傳遞 – VladL 2013-03-12 08:46:29

回答

0

C被稱爲中級語言,因爲它實際上是綁定了機器級語言和更傳統的高級語言之間的差距。用戶可以使用c語言進行系統編程(用於編寫操作系統)以及應用程序編程(用於生成菜單驅動的客戶計費系統)。所以它被稱爲中級語言。

高電平 - 爪哇 - 阿達,Modula-2的,帕斯卡,COBOL,FORTRAN,BASIC

中層 - 爪哇(通過C接口),C++,C,第四,宏組裝

低級別 - 彙編

+0

如果你正在編寫Ada nad,我會給Java和C#帕斯卡是高層次的,因爲它比他們高,它使用JVM nota bene。 – Hauleth 2013-03-12 08:49:19

+0

Sure Lukaz Niemier ..但是這裏我要說的是哪種語言是中級的(約束機器級語言之間的差距),所以Java可以處於高級和中級.. – 2013-03-12 08:58:46

+1

因此可以是Ada或Pascal。 Java只能通過C接口來完成,通過JNI調用本地函數。 Pascal可以直接執行此操作,甚至可以與純粹的Asm代碼鏈接。 – Hauleth 2013-03-12 09:03:53

4

當你寫的系統軟件或驅動程序,您需要在您的環境嚴格的控制:內存使用,時間限制等

用C#這是不可能的。即使你忽略了一個事實,即你在一個引入了大量開銷的虛擬機之上運行,你仍然無法控制內存分配/釋放策略,你永遠不知道GC線程何時會啓動並阻止你的工作線程等。

除此之外,C#中還有很多低級別的操作:從讀取/寫入設備寄存器的值或直接訪問內存開始,進入更具體的任務。

+0

爲什麼世界上有人投票回答這個問題?我找不到任何說這是不正確的。 – 2013-03-12 10:25:49

3

除了一些API是C++ API之外,沒有真正的理由說明爲什麼你不能在C#中完成它。與一些人在評論中所說的不同,您不是創建驅動程序,而是創建(引用)「測試應用程序來測試圖形驅動程序的某些功能」。 (爲什麼有人會創建驅動程序,除非他們是硬件製造商?)

像DirectShow這樣的流行API有C#綁定。對於那些沒有的,你可以通過在C#代碼引用的C++/CLI程序集中封裝API來輕鬆創建自己的API。

+2

從C#應用程序調用C++ API是沒有問題的。使用C#的真正問題是JIT編譯語言的固有侷限性,它運行在.NET Framework等運行時環境之上。如果它只是一個內部測試應用程序,那可能是無關緊要的。如果您是將此應用程序發送給大量客戶的驅動程序製造商,則可能需要重新考慮此問題。還記得ATI的崩潰,他們在.NET Framework上編寫的圖形卡配置應用程序需要幾分鐘*才能打開嗎?超級尷尬。 – 2013-03-12 10:24:45

+0

同樣,他/她不是創建驅動程序,而是測試驅動程序的正常應用程序。 .NET應用程序決不需要花費幾分鐘時間才能打開。 – user1610015 2013-03-12 10:28:47

+0

他們首次在冷啓動時初始化框架。至少他們在一年以前做了。硬件略有改善,但軟件膨脹趨於保持良好。 – 2013-03-12 10:38:04