2010-11-25 84 views
3

我在Windows XP(在不久的将来迁移到Windows 7)的Delphi(D7和D2006)中进行编程。我需要为我正在做的一些工作以及大多数数学库(目前我倾向于Mathematica)使用数学库,我已经研究过将生成已编译的C代码。这样的代码将为我的主程序提供特定的功能。如何使用多种开发语言

我有一个非常基本的问题 - 给定此开发设置 - 我如何开始利用Delphi编译的c代码?我真的需要宝贝来让我开始这个过程。

+0

您打算使用** Mathematica **来生成C代码吗? – 2010-11-25 19:29:33

+0

@Belisarius是的。 – 2010-11-25 19:32:26

回答

4

我已经用我的FE产品OrcaFlex完成了相当多的工作。你有两个选项可以链接到Delphi的C代码:静态或动态。我静态链接,因为它使分发和版本化更容易。但让它静态工作真的是一个窍门,你必须依赖Delphi的一些无证方面。

我怀疑为您的需要动态链接是最好的。基本上你需要编译和链接你的C代码到一个DLL中。我建议使用Borland C编译器来做到这一点。您可以使用免费的命令行版本BCC55来执行此操作。使用Borland C的优点在于,它对Delphi 8087浮点单位进行了相同的假设。如果你使用MSVC构建,那么你会发现MS选择不提高浮点异常。 Borland C确实提出了浮点异常。这有点像一个角落案例,但如果您试图发布需要健壮的产品,它就变得相关。

您应该知道,C代码默认情况下会使用C调用约定,我会坚持这一点。通过将外部例程声明为cdecl调用约定,将它带入Delphi。

您需要注意的另一件事是定义两个模块之间的清晰接口。您需要确保异常不会跨越模块边界,并且您不会跨越边界传递任何特殊类型(例如,Delphi字符串)。因此,对于字符串使用PChar(或者甚至更好的PAnsiChar或PWideChar,以确保在升级到Delphi 2009及更高版本时,它不会改变含义)。

2

如果您当前安装了Mathematica,请转到文档中心并查找guide/CLanguageInterface,否则该指南是available on the web并且在那里有很好的阅读。

我的理解是,如果您需要全功能,Mathematica可以通过MathLink生成与Mathematica引擎链接的C程序,或者如果您只需要较低级别的功能,那么它可以生成可以静态链接的代码与编译Mathematica库。所以这个独立的代码是可能的。

查看Code Generator documentation

如果您可以将C程序转换为DLLs,那么从Delphi访问这样的外部函数相对简单,外部声明。

function MathematicaRoutine(const x : double) : double; external 'MyInterface.dll'; 

有势必会在得到这个,如果你需要实现静态绑定,使用未安装的Mathematica,如果确实有可能工作的复杂性的大量。我从来没有尝试过。

3

我一直很喜欢Lohninger的SDL Library(http://www.lohninger.com/mathpack.html)。它是用Delphi写的,可以直接编译到你的应用程序中,所以没有捆绑或调用约定问题或浮点使用差异,正如本主题中的其他响应所讨论的。

看看他包括什么。如果你幸运的话,他的图书馆会满足你的需求,你就可以使用它!

2

您可以使用RAD Studio将您的项目与Delphi和C++(Builder)代码混合使用。将自动创建的C代码放入C++ Builder文件(.cpp)中,其余部分添加Delphi文件。