如何在不使用Native Delphi安装.net框架的情况下使用.net程序集?

时间:2012-12-01 10:52:35

标签: .net delphi linker native

this post中,nick hodges写道:“Delphi可以将.Net代码链接到您的EXE中”。 我们怎么做?它是否存在关于这个delphi Capability的任何例子?

5 个答案:

答案 0 :(得分:7)

如果您阅读了您链接的文章下的评论,您可以读到这是现已解散的delphi.NET(delphi8,如果我没记错的话)的一个功能。 即使这是可能的,你仍然会依赖于.NET框架。

所以问题的答案是:不可能

答案 1 :(得分:5)

您可以使用常规COM组件,使用C#编写,并使用定义为ComVisible(true)的接口。

使用Managed 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低得多,更多的是关于在两个平台之间共享UI,而Managed VCL真的是在Delphi进程中托管DotNet CLR机器,然后通过自己的类访问它。这是一项了不起的工作!

答案 2 :(得分:3)

有一种商业解决方案“hydra”。 http://www.remobjects.com/hydra/

另一种可能性是使用COM互操作。要嵌入.NET源,您可以将程序集存储为资源文件,如果需要单个.exe文件,则稍后将其写入光盘。

答案 3 :(得分:3)

尼克写的文章提到了一个现在几乎过时的旧版Delphi。当Delphi 2006和2007作为“RAD Studio”的一部分发布时,它们包括三个“个性”:

  • 德尔斐
  • Delphi.net
  • C ++ Builder

.net个性作为发货产品被删除,并且不再出现在“2009”版本或任何后续版本中,但您可能会感兴趣的是您知道提供“Delphi.net 2007”的基础技术你仍然在Delphi XE3中使用,因为delphi本身依赖于.net程序集。换句话说,Embarcadero仍在内部使用“Delphi .net”,但不提供给您。这不是因为它们吝啬,而是因为“Delphi.net”作为产品不再重要,而.Net不再是“所有新Microsoft API的未来”。

微软花了很多精力让每个人都害怕.Net。不仅每个人都必须接受它,微软声称.net将是生成Windows API的新默认方式。由于delphi当时只是一个Windows产品,并且由于Delphi仍主要用于生产Windows应用程序,因此Windows专用工具的开发人员无法忽视微软声明的意图。 .Net是未来。

即使在微软内部,这个想法也因此而死亡。办公室团队和Windows团队都没有喝.net kool-aid,而.net现在只是Windows中的另一层。

目前,在2007年之后的任何产品版本中,Delphi中都没有提供设施来生产或使用.net组件。但是,存在第三方解决方案。

虽然有人评论说“你仍然可以获得Delphi.net 2007作为旧版本产品的一部分”,但是大多数RAD工作室都会购买,但是不建议在这个较晚的时候尝试从Delphi.net开始。< / p>

对于使用类似Delphi语法的纯.net编程,请尝试使用Delphi Prism。对于.net代码和Delphi本机代码之间的接口,在同一个过程中尝试RemObjects Hydra。要在不同进程中连接.net代码和Delphi代码,请尝试使用RemObjects SDK。

就尼克的陈述而言,他在博客的顶部发布了这篇文章,这是一篇非常古老的博客文章,重新发布了历史价值。这就是他的陈述的意思;它们在首次发布时是最新的,从那时起,时间已经过了一段时间。

更新 Bruce慷慨地指出,如果您使用.net创建了COM组件,那么有关组件导入技术的评论可能仍然适用。然后你可以使用COM互操作来创建一个特殊的.net程序集,可以通过COM从Delphi中使用,但我从来没有这样做过,所以我不打算在这里尝试。

答案 4 :(得分:3)

查看AToZed CrossTalk

  

什么是CrossTalk?

     

CrossTalk允许使用本机Delphi代码   使用和使用.NET类和库。   无需更改或控制   .NET类。 CrossTalk使得   类可用,使它们看起来像   本地课程。没有注册表项或COM   注册是必需的。只有几个DLL文件   在您的应用程序目录中是必需的。