2013-03-12 23 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