我使用Delphi进行大部分开发(特别是D7)。我还使用ASP.NET / C#做了一些辅助工作。我发现自己正在努力将代码从一种语言转换到另一种语言,以及如何在另一方面正确发布DLL函数以便从另一方调用。
我确信语言之间必须有一些很大的翻译词典 - 例如......
原始Delphi来源:
if X = 5 then begin
S:= IntToStr(1);
end else begin
S:= IntToStr(-1);
end;
C#翻译:
if (X == 5)
{
S = (1).ToString();
}
else
{
S = (-1).ToString();
}
Delphi DLL函数:
function DoSomething(const In: PChar; const zIn: Integer;
var Out: PChar; var zOut: Integer): Boolean; stdcall;
C#导入:
[DllImport("MyDll.dll", CharSet=CharSet.AnsiChar,
CallingConvention=CallingConvention.StdCall)]
public static extern bool DoSomething(in string In, in int zIn,
out string Out, out int zOut);
(请原谅我,如果这是不正确的,我通过记忆而不是通过复制/粘贴输入)
我希望在语言之间有某种等价词典,所以我知道如何将一端与另一端相匹配。有人知道任何好的网站或书吗?
答案 0 :(得分:2)
您可以使用Reflector将大多数.net程序集反编译为多种语言,包括c#和object pascal。这是比较一个的好方法。
顺便说一句,代码的大小对我来说似乎差不多了if X = 5 then begin
S:= IntToStr(1);
end else begin
S:= IntToStr(-1);
end;
VS
if (X == 5) {
S = (1).ToString();
} else {
S = (-1).ToString();
}
70个字符,而不是61个字符。
甚至......
s = (x == 5) ? ""+1 : ""+(-1);
(上面这行只是为了好玩。最好使用1.ToString()等因为“”+1会导致装箱并将其作为单个参数发送给Concat(对象),然后执行它上面有ToString()。直接在int上调用ToString()会更有效。)
答案 1 :(得分:1)
读取CLSCompliant属性。
如果您想提供互操作,只需确保您班级的公共API符合CLS合规性。我不确定你是否可以针对delphi程序集运行FXCop,但如果你声明了CLSCompliant属性,它会在遇到违规时抱怨。
答案 2 :(得分:1)
我今天偶然发现了 this article ,这基本上涵盖了我想知道的内容。
答案 3 :(得分:-2)
你可以去[developerfusion] [1] [1]:http://www.developerfusion.com/tools/convert/csharp-to-python/找出如何在不同语言之间翻译源代码。