如何在 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