我一直使用反射器,直到它的试用期结束。
我已经成功地解码了许多应用程序。通过我最近的帖子,我发现它也可以解码delphi.net vcl应用程序(d2007)。
我是否可以解码delphi.net vcl并将其转换为c#应用程序,该应用程序可以使用visual studio完全编译成功。
发布于 2011-05-15 02:35:15
问题Can i decode delphi.net vcl app and translate it to a c# application which can be compiled success fully using visual studio ?的答案是No
这就是为什么。
当你使用delphi (8),2005,2006或2007创建一个vcl应用程序时,delphi编译器创建一个.NET应用程序,内部类是包装器和助手来调用真正的.net类,这些类(包装器)是为了方便现有的delphi win32开发人员创建.net应用程序而创建的。
考虑这个示例。
这是一款delphi .net应用程序
program DelphiNetConsole;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
try
Writeln('Hello From Delphi 2007.Net');
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.如果您手动将此代码转换为C
using System;
using System.Text;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("Hello From Delphi 2007.Net");
}
catch (System.Exception E)
{
Console.WriteLine(E.Message);
}
}
}
}但是使用反射器,你会得到第一个片段的结果
public static void DelphiNetConsole()
{
System.IsConsole = true;
try
{
TextOutput.Output.WriteWideString("Hello From Delphi 2007.Net", 0).WriteLn();
System.@_IOTest();
}
catch (Exception exception1)
{
Exception exception2 = System.@ExceptObject = exception1;
Exception E = exception1;
TextOutput.Output.WriteWideString(TObjectHelper.ClassName(System.@GetMetaFromObject(E)), 0).WriteWideString(": ", 0).WriteWideString(E.Message, 0).WriteLn();
System.@_IOTest();
System.@ExceptObject = null;
}
}正如您所看到的,最后一段代码调用了许多帮助器类和函数(如TextOutput),它们不是标准.net框架的一部分,而是Borland.Delphi.System名称空间的一部分。
反射器可以帮助你自动翻译一些代码片段,但不能翻译完整的应用程序。
发布于 2011-05-15 10:27:53
答案是否定的,即使您部署了相应的Delphi程序集,例如Borland.Delphi.dll和Borland.Vcl.dll,您也拥有在C#中没有等效项的结构,例如类引用,这些结构不能在Visual Studio/C#中使用。我设法在Delphi中转换了大约80,000行非可视化应用程序框架,以便在Visual Studio/C#中使用,但我花了3个多月的时间,我必须转换使用类引用等内容的代码,以使用System.Type类。完成所有这些工作后,通过部署一些基本的Delphi程序集、Indy程序集和Jcl程序集,我现在可以在Delphi或Visual Studio中进行开发,并维护这两种类型的应用程序之间的通信兼容性。
我做的另一件事是在构建之前对源代码运行一些自定义的预处理,以剥离"T...“键入prefix,这样在Visual Studio中使用时,实际的框架程序集看起来就像C#程序集一样。这并不是一件容易的事情,但我的框架中的所有类型、常量等都以"Csi“、"App”、"Fwk“或"Dev”为前缀,这使得这一点成为可能。如果没有这一点,我就无法剥离特定于Deplhi的标识符命名约定。
除非这样做有压倒性的好处,超过了成本(比如我),而且你的代码本质上是非可视化的(比如我),否则涉及的工作量可能太大了,以至于无法证明这项工作的合理性。我想知道我是不是世界上唯一一个成功地将大量代码从Delphi迁移到Visual Studio中的Delphi开发人员。似乎没有其他人能够提供这样一个成功的故事,这真的让你想知道这有多可行。
https://stackoverflow.com/questions/6003369
复制相似问题