我使用过反射器直到试用期结束
我已成功解码了许多应用程序。通过我最近的帖子,我能够识别出它还可以解码delphi.net vcl apps(d2007)。
我可以解码delphi.net vcl并将其转换为c#应用程序,可以使用visual studio完全编译成功。
答案 0 :(得分:6)
问题Can i decode delphi.net vcl app and translate it to a c# application which can be compiled success fully using visual studio ?
的答案是否
这就是为什么。
使用delphi(8),2005,2006或2007创建vcl net应用程序时,delphi编译器会创建一个.NET应用程序,它对内部类有很多依赖关系,这些内部类是包装器和帮助器来调用真正的.net类,创建这些类(包装器)是为了便于为现有的delphi win32开发人员创建.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.
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
命名空间的一部分。
Reflector可以帮助您以自动方式翻译代码片段而不是整个应用程序。
答案 1 :(得分:2)
答案是否定的,即使你部署了相应的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 ...”类型前缀之前运行源代码的一些自定义预处理,以便在Visual Studio中使用时实际框架程序集看起来就像C#程序集。这不是一项容易的任务,但是由于我的框架中的所有类型,常量等都是“Csi”,“App”,“Fwk”或“Dev”的所有类型,常量等都可以实现。如果没有这个,我就不能剥离Deplhi特定的标识符命名约定。
除非这样做的成本超过了成本(比如我),并且你的代码基本上是非可视的(比如我),否则所涉及的工作量可能太大而无法证明工作的合理性。我想知道我是否是世界上唯一成功从Delphi迁移大量代码以供Visual Studio使用的Delphi开发人员。没有其他人似乎能够提供这样的成功故事,这真的让你想知道这是多么可行。