在这篇文章中, nick hodges 写道:“Delphi 可以将 .Net 代码链接到您的 EXE 中”。我们怎么做?是否存在有关此德尔福功能的任何示例?
5 回答
如果您阅读链接的文章下的评论,您会发现这是现已失效的 delphi.NET(如果我没记错的话,是 delphi8)的一个功能。即使这是可能的,您仍然会依赖 .NET 框架。
所以你的问题的答案是:不可能
您可以使用用 C# 编写的常规 COM 组件,并将接口定义为 ComVisible(true)。
托管 VCL可以在 Delphi 可执行文件中更直接地导入 C# 程序集。
托管 VCL 可以:
- 使用程序集名称或位置从未注册 COM 的程序集创建 .Net 对象,并从流中加载 .Net 程序集;
- 创建和使用 COM 不可见的 .Net 对象;
- 使用参数化构造函数创建 .Net 对象;
- 调用 .Net 对象的属性/方法/字段,包括静态属性/方法/字段;
- 处理 .Net 异常并获取所有 .Net 异常属性,包括异常类型名称、StackTrace 等;
- 获取有关加载的.Net框架实例的信息,例如内存使用情况和按代堆的大小;
- 加载所需的 .Net 运行时,甚至选择启动时使用的运行时版本;
- 将 .Net 控件放在 VCL Win32 窗体上;
- 在 Win32 应用程序中使用 ADO.Net 数据源作为 TDataSet 后代。ADO.Net 将是 SQL Server 2005 (Yukon) 的本机和最受支持的 API;
- 托管 ASP.Net 页面和服务;
- 将 .Net 程序集作为资源嵌入到 Win32 应用程序中。
它比 Hydra 低得多,Hydra 更多的是在两个平台之间共享 UI,而 Managed VCL 真正是关于在 Delphi 进程中托管 DotNet CLR 机器,然后通过自己的类访问它。这是一项了不起的工作!
有一种商业解决方案“hydra”。http://www.remobjects.com/hydra/
另一种可能性是使用 COM 互操作。要嵌入 .NET 源,您可以将程序集存储为资源文件,然后在需要单个 .exe 文件时将其写入磁盘。
尼克写的文章提到了一个现在几乎过时的旧版本的德尔福。当 Delphi 2006 和 2007 作为“RAD Studio”的一部分发布时,它们包括三个“个性”:
- 德尔福
- 德尔福网
- C++ 生成器
.net 个性已作为交付产品被删除,不再出现在“2009”版本或任何后续版本中,但您可能会感兴趣的是,为您提供“Delphi.net 2007”的底层技术仍然是在 Delphi XE3 中使用,因为 delphi 本身依赖于 .net 程序集。换句话说,Embarcadero 在内部仍然使用“Delphi .net”,但不提供给您。那不是因为他们小气,而是因为“Delphi.net”作为产品不再重要,.Net 不再是“所有新微软 API 的未来”。
微软花了很多精力让每个人都害怕.Net。不仅每个人都必须接受它,微软还声称 .net 将成为生成 Windows API 的新默认方式。由于当时 delphi 只是一个 Windows 产品,而且 Delphi 仍然主要用于生产 Windows 应用程序,因此仅 Windows 工具的开发人员不能忽视 Microsoft 所声明的意图。.Net 是未来。
即使在微软内部,这个想法也因急需而死。office 团队和 Windows 团队没有喝 .net kool-aid,而 .net 现在只是 windows 中的一层东西。
如今,在 2007 年之后的任何产品版本中,Delphi 都没有提供“盒装”工具来生产或使用 .net 程序集。但是,存在第三方解决方案。
尽管有人评论说“您仍然可以将 Delphi.net 2007 作为旧版本产品的一部分”购买大多数 RAD 工作室,但不建议您在这么晚的时候尝试从 Delphi.net 开始。
对于使用类似 Delphi 语法的纯 .net 编程,请尝试 Delphi Prism。对于 .net 代码和 Delphi 本机代码之间的接口,在同一进程中尝试 RemObjects Hydra。对于不同进程中的 .net 代码和 Delphi 代码之间的接口,请尝试 RemObjects SDK。
至于尼克的声明,他在他的博客顶部发布了这是一篇非常古老的博客文章,为了历史价值而被重新发布。这就是他的陈述的意思;它们在第一次发布时是最新的,从那时起时间已经过去了一点。
更新Bruce 友好地指出,如果您使用 .net 创建了 COM 组件,有关组件导入技术的评论可能仍然适用。然后,您可以使用 COM 互操作来制作一个特殊的 .net 程序集,该程序集可以通过 COM 使用,来自 Delphi,但我从未这样做过,所以我不打算在这里尝试。
什么是串音?
CrossTalk 允许原生 Delphi 代码使用和使用 .NET 类和库。.NET 类不需要更改或控制。CrossTalk 使这些类可用,使它们看起来像本地类。不需要注册表项或 COM 注册。只需要应用程序目录中的几个 DLL 文件。