我一直听说Delphi几乎可以做任何C ++可以做的事情......除了写Windows驱动程序。这是正确的,如果是这样,那为什么呢?
我最近在线阅读了一篇可能表示possible solution for writing drivers with Delphi的博客文章,但它已有3年了,我不知道这些信息有多准确。
因此,使用最新版本的Delphi(2010),编写Windows驱动程序在技术上是否可行?
答案 0 :(得分:18)
在技术上可以用Delphi编写一些驱动程序,但就一般答案而言,我会说:你不能用Delphi轻松编写驱动程序。
首先,用户模式驱动程序(UMDF)驱动程序和内核模式(KMDF)驱动程序之间存在差异。使用Delphi可以实现UMDF驱动程序。但是,KMDF驱动程序并不容易实现,因为
1)Delphi的链接器无法生成它们和
2)Delphi的目标文件格式与Microsoft链接器默认使用的COFF格式不同。
3)Delphi的RTL假设它处于用户模式并且可能做某些不应该在kernel-land中做的事情(我认为例如处理异常的方式;还有不同的内存管理),所以你必须非常小心哪些RTL功能可以安全使用。系统和SysInit单元也存在困难(请参阅Ritsaert Hornstra的评论到另一个答案)。我不是说这些不是无法解决的问题(参见你链接的帖子),如果你真的很专注,但不会直截了当。
其次,对于Win64,KMDF驱动程序(我不知道UMDF,实际上是否有人可以评论?)必须使用64位代码。从目前开始,没有64位Delphi编译器,编写它们肯定是禁止的。
答案 1 :(得分:6)
您可以使用任何语言编写Windows驱动程序,该编译器可以编译为PE格式的DLL,没有外部依赖项(除了批准在内核中加载的那些),可以使用STDCALL链接调用函数,并导出函数STDCALL链接。
没有未经批准的外部依赖性将是我想到的难点。 :)
答案 2 :(得分:3)
我找到了一些可能对您有帮助的链接:
答案 3 :(得分:1)
我同意以前的答案。 我实际上是在一个特殊情况下完成的:打印显示器。这是一个在用户模式下运行的驱动程序的特例,我可以在Delphi中编写一个。在那里使用Delphi肯定有一些好处。
但是尚未提及的最后一个陷阱(我认为)是你需要从DDK头文件中翻译数以万亿的复杂结构和宏。特别是翻译一些复杂的宏可能非常棘手。