【问题标题】:Is there a way to compile C code from the Delphi IDE as part of a Delphi project?有没有办法从 Delphi IDE 编译 C 代码作为 Delphi 项目的一部分?
【发布时间】:2012-12-13 02:43:59
【问题描述】:

有没有办法从 Delphi IDE 编译 C 代码?

我想使用一些 C 代码作为 Delphi 项目的一部分(并且不希望将其放在 DLL 中)。那么,在 Delphi IDE 中,我可以编译 C 代码吗?也许我可以使用关键字来指示代码插入的开头(就像ASM 一样)?或者将 C 代码放在一个单独的单元中 - 但我将如何从我的 Delphi 代码中调用它?

如果可以,我该怎么做?谢谢...


[更新] 虽然听起来可以使用Free Bolrand Command Line C++ Compiler 完成,但我最终决定将 C 代码放入 DLL 并静态链接它。我想这两种解决方案都可以接受)?)

【问题讨论】:

  • 如果您的 Delphi IDE 版本有“构建事件”,您应该能够使用“预构建事件”来调用您喜欢的 C 编译器并生成您可以静态链接的目标文件在您的德尔福代码中。(请参阅@KenWhite 的回答)
  • 是的,预构建事件调用 C 编译器。免费的 Borland C++ 5.5 是 32 位的不错选择。但这只是 32 位。如果你也想要 64 位,Windows SDK 有 MSVC。 Mingw 生成 64 位 Delphi 不会链接的 .obj 文件。
  • 您的问题是一个很好的例子,您需要在文本或标签或两者中指定 Delphi 版本!
  • @Jan 为什么?我知道的所有 Delphi 版本的答案都是一样的。
  • 早期版本中没有预建事件吗?此外,IIRC 最近切换到 MSBuild...

标签: delphi


【解决方案1】:

不,不能将 c 代码编译为 Delphi 项目的一部分。

您可以使用 C++ Builder 编译 c 代码,并在 Delphi 应用程序中使用对象 (*.obj) 文件,方法是将它们与 {$L file.obj} 链接,然后像调用任何其他 Delphi 函数一样调用它们,但您必须自己提供 c 运行时库函数的实现。 (crtl.pas 单元中有一些可用(XE2/XE3 中的System.Win.crtl.pas);如果没有,您需要自己编写 Delphi 替换)。

有关如何执行此操作的示例,您可以通过查看Zlib.pas(XE2/3 中的System.ZLib.pas)来了解如何使用 ZLib。

正如其他人在 cmets 中提到的问题,您可以设置预构建事件以在构建项目之前运行您的 c 编译器,这将起作用;从技术上讲,我不确定这是否算作“作为项目的一部分进行编译”,因为它实际上是在运行外部进程。不过,上述信息在这种情况下仍然适用。

【讨论】:

  • 你知道我是否可以链接免费的 Borland C++ 编译器创建的目标文件吗?或者,事实上,任何其他 Windows C 编译器?
  • David Heffernan 已经提到免费编译器可以工作(在对您上面问题的评论中)。我不知道我还能提供什么更多信息。 MS 编译器不起作用;它们产生了与 Borland 编译器格式不兼容的不同格式的 .obj 文件。 (对于某些版本的 Delphi,在 Delphi Bin 文件夹中有一个实用程序可以将 MS 的 COFF 格式转换为 Borland OMF 格式。)
  • 忘了说转换工具是COFF2OMF.exe
  • 从 XE2 开始,你 can link with COFF 目标文件。
  • @TOndrej:谢谢。我不知道。 :-) 我会把它藏起来以备将来使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多