跨语言编程 - 等效类型列表?

时间:2011-11-23 00:26:41

标签: c# asp.net delphi programming-languages

我使用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);

(请原谅我,如果这是不正确的,我通过记忆而不是通过复制/粘贴输入)

我希望在语言之间有某种等价词典,所以我知道如何将一端与另一端相匹配。有人知道任何好的网站或书吗?

4 个答案:

答案 0 :(得分:2)

您可以使用Reflector将大多数.net程序集反编译为多种语言,包括c#和object pascal。这是比较一个的好方法。

http://www.reflector.net/

顺便说一句,代码的大小对我来说似乎差不多了

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/找出如何在不同语言之间翻译源代码。