如何在 asp.net 应用程序中使用 Delphi 制作的库?

Posted

技术标签:

【中文标题】如何在 asp.net 应用程序中使用 Delphi 制作的库?【英文标题】:How to use a library made in Delphi in an asp.net application? 【发布时间】:2017-06-21 21:18:59 【问题描述】:

我正在编写的一个 asp.net 应用程序必须提供一个 pdf 文件和一个绘图(dxf AutoCAD 文件),两者都是用 Delphi 程序创建的。

只是为了澄清这个场景:我有熟练的 Delphi 开发人员,所以我分配了他们的任务来创建创建 pdf 和 dxf 文件的程序。

所以一共有3个系统:

1) 一个 asp.net 主应用程序

2) 一个 Delphi 应用程序,它接收一些参数(来自 asp.net)并生成一个 pdf 文件。

3) 一个 Delphi 应用程序,它接收一些参数(来自 asp.net)并生成一个 dxf 文件。

现在 Delphi 应用程序作为独立的 win32 应用程序(其中参数通过 UI 控件设置)工作正常,我需要转换它们以便可以从 asp.net 使用它们。

我对并发/性能问题不感兴趣,我的目标只是调用“创建文件的系统部分”,以便让 asp.net 应用程序的最终用户下载它。我也可以接受这是线程不足(我的意思是:一次只有一个用户可以在后台调用一个 Delphi 应用程序)

您能建议最好的方法吗?

在开始这个项目之前,我想到了“dll”或“命令行 exe”,但现在我怀疑并想知道我可能错过了一些更方便的技术。

请考虑将库移植到 c# 这不是一个选项,因为我们使用了一些没有 100% .net 对应物的第 3 方 Delphi 组件。

【问题讨论】:

我不明白反对票。请用评论解释它。在问之前我搜索了很多。 我猜你的问题太宽泛了,因为你实际上是在寻求建议(你能建议...)。这就像来到这里并询问“我如何与 Google Maps API 集成”。即使您在 Google 上搜索了很多内容,但到目前为止您还没有发布您尝试过的内容,也没有显示代码示例。 无论如何,如果我要回答这个问题,我会建议您的 C# 应用程序创建一个 .txt.xml 包含某个文件夹中的参数,Delphi 应用程序将具有最终扫描该文件夹并处理请求的机制(如Timer),C# 应用程序将等待 pdf 可用在另一个(或相同)文件夹中。您可能希望为其他类型的请求创建另一个文件夹。另外,我会尝试将这些 Delphi 应用程序创建为 windows 服务,看起来它们实际上不需要 UI。 它太宽泛了,而且基于观点。对不起,不适合这个网站 @Alisson 你用TTimer 建议的解决方案,文本文件很聪明,我也可以考虑。在像这样的简单案例中,我使用 NSSM 将独立的 exe 快速转换为 Windows 服务。 【参考方案1】:

几年前(大约在 Delphi 8 时间范围内),有一个实际的 Delphi.NET 编译器可以生成在 ASP.NET 中运行的 .NET 程序集(my own website 今天仍然在我用 Delphi 编写的一些 ASP.NET 程序集上运行.NET),甚至使用Delphi as a scripting language in ASP.NET coding。但是 Delphi.NET 现在是一个死产品,.NET 不再是任何现代 Delphi 编译器支持的平台。

因此,如果您想在 ASP.NET 中运行 Delphi 代码,您将不得不:

    编写一个普通的 DLL 并将其安装到您网站的 \bin 文件夹中,然后使用 PInvoke 访问它。

    编写一个 COM 对象并将其安装在服务器计算机上,然后使用 COM 互操作访问它(参见 Server.CreateObject() 方法)。

    将您的代码移植到另一个支持本机 .NET 开发的编译器。

【讨论】:

您可以将代码公开为 COM 对象。或者将其公开为 Win32 dll 并使用 pinvoke 使用它。因此,这个答案实际上是不正确的。 谢谢。皮诺夫克听起来不错。另一个聪明的解决方案是使用与 NSSM 一起安装的独立 exe(使用问题的 cmets 中描述的计时器方法) 我建议使用计时器方法,因为它是我能想到的最简单的解决方案。如果我要使用@RemyLebeau 给出的建议,我将不得不做一些研究,因为在 COM 和生成 .net 兼容的 dll 方面我是新手。如果你有时间做研究(或者已经知道怎么做),我认为按照 Remy 的建议是个好主意。 我没有时间研究,deadline 压力所以计时器很好,而且有一个数据库所以我将使用数据库表而不是文件作为通信工具

以上是关于如何在 asp.net 应用程序中使用 Delphi 制作的库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在asp.net c# web应用程序中使用asp.net vb页面

如何在 ASP.Net Core 中使用 IHostedService

如何使用c#在asp.net网页中显示C程序错误

如何在 ASP.Net 应用程序中使用 HTTPS

如何在 asp.net core 2.1 中使用 net.tcp 服务

如何在 ASP.NET Core 3.1 中使用 Java?