首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多种开发语言

如何使用多种开发语言
EN

Stack Overflow用户
提问于 2010-11-26 03:21:25
回答 4查看 416关注 0票数 3

我在Windows上用Delphi语言(D7和D2006)编程(在不久的将来会迁移到Windows7)。我需要使用一个数学库来做一些我正在做的工作,并且我所看到的大多数数学库(目前我倾向于使用Mathematica )都会生成编译过的C代码。这样的代码将为我的主程序提供特定的功能。

我有一个非常基本的问题--考虑到这个开发设置--我如何开始使用Delphi编译后的c代码?我真的需要一些小步骤来让我开始这个过程。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-26 03:39:02

我已经用我的FE产品OrcaFlex做了相当多的工作。从Delphi链接到C代码有两种选择:静态或动态。我静态链接,因为它使分发和版本控制变得更容易。但是要让它静态地工作真的是一个很大的技巧,而且你必须依赖于Delphi的许多未记录的方面。

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

您应该知道,默认情况下,C代码将使用C调用约定,我将坚持使用C调用约定。通过将外部例程声明为cdecl调用约定,可以将其引入Delphi。

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

票数 4
EN

Stack Overflow用户

发布于 2010-11-26 04:10:57

我对Lohninger (http://www.lohninger.com/mathpack.html)的SDL库非常满意。它是用Delphi编写的,并直接编译到您的应用程序中,因此不存在绑定或调用约定问题或浮点使用差异,正如本线程中的其他响应所讨论的那样。

看看他都包含了些什么。如果你幸运的话,他的库会满足你的需求,你就可以使用它了!

票数 3
EN

Stack Overflow用户

发布于 2010-11-26 03:44:59

如果你目前已经安装了Mathematica,请到文档中心查找guide/CLanguageInterface,否则该指南就是available on the web,在那里好好读一读。

我的理解是,如果你需要完整的功能,或者如果你只需要较低级别的功能,数学A可以生成通过MathLink与数学引擎链接的C程序,那么它能够生成可以与编译的数学A库静态链接的代码。这样就可以编写独立代码了。

请参阅Code Generator documentation

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

代码语言:javascript
复制
function MathematicaRoutine(const x : double) : double; external 'MyInterface.dll';

如果你需要实现静态绑定,在没有安装Mathematica的地方使用,如果确实可能的话,让它工作起来肯定会有很多复杂的事情。我从来没有尝试过。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4280267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档