如何将一些C#代码转换为Pascal?

如何将一些C#代码转换为Pascal?,c#,pascal,C#,Pascal,我有两个函数需要转换为Pascal以包含在inno安装程序中,以便在安装时验证序列号 任何帮助都将不胜感激,因为我已经有8年没有写过任何pascal了 这是C代码 public静态长DecodeAuthID(字符串键集、字符串待编码) { StringBuilder retval=新建StringBuilder(); for(int i=0;i

我有两个函数需要转换为Pascal以包含在inno安装程序中,以便在安装时验证序列号

任何帮助都将不胜感激,因为我已经有8年没有写过任何pascal了

这是C代码

public静态长DecodeAuthID(字符串键集、字符串待编码)
{
StringBuilder retval=新建StringBuilder();
for(int i=0;i
您可以尝试将其转换为Oxygene,Delphi Prism中使用的对象Pascal

问题在于此代码使用了InnoSetup中不可用的.NET类(如StringBuilder)和转换器(Int32.Parse)。

您可以尝试将其转换为Oxygene,Delphi Prism中使用的对象Pascal


问题是这段代码使用了InnoSetup中不可用的.NET类(如StringBuilder)和转换器(Int32.Parse)。

您可以看看这段代码(未测试,但如果我用
GetAuthIDFromRegistry
注释掉未实现的行,它会编译-无法测试,因为我没有任何示例输入/输出数据可用于处理您的问题)。它可能不是100%正确,但至少应该让您从正确的方向开始

function DecodeAuthID(KeySet: string; toDecode: string): longint;
var
  idx, c: Integer;
  Temp: string;
begin
  Temp := '';
  for idx := 1 to Length(toDecode) do
  begin
    // Replaces keyset.IndexOf. Handles no match found in KeySet just in case.
    c := Pos(toDecode[idx], KeySet);
    if c > 0 then
      Temp := Temp + KeySet[c];
  end;
  // Handles no values set in result by returning 0
  Result := StrToIntDef(Temp, 0);
end;

function ReverseString(stringToReverse: string): string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(stringToReverse) do
    Result := stringToReverse[i] + Result;
end;

procedure GetLocationFromAuthenticationID;
var
  registryValue: string;
  value1, value2, keyset: string;
  valuesReversed: string;
  values: string;
  authID: LongInt;
  locationID: Integer;
begin
  // GetAuthIDFromRegistry code not provided in question.
  // See InnoSetup Help File, Pascal Scripting: Support Functions Reference,
  //   subheading "Registry functions"
  registryValue := GetAuthIDFromRegistry;
  value1 := ReverseString(registryValue);

  // Delphi strings are 1 based, as opposed to the C# char array's 0 base
  value2 := Copy(value1, 1, 12);
  keyset := ReverseString(value2);

  valuesReversed := Copy(Value1, 13, Length(value1) - 12);
  values := ReverseString(valuesReversed);
  authID := DecodeAuthID(keyset, values);
  locationID := authID - (authID - 1);
end;

此处不包含源代码的所有函数在InnoSetup帮助文件的“Pascal脚本:支持函数参考”中列出为受支持的函数。

未测试,但如果我用
GetAuthIDFromRegistry
注释掉未实现的行,它会编译-无法测试,因为我没有任何示例输入/输出数据可用于处理您的问题)。它可能不是100%正确,但至少应该让您从正确的方向开始

function DecodeAuthID(KeySet: string; toDecode: string): longint;
var
  idx, c: Integer;
  Temp: string;
begin
  Temp := '';
  for idx := 1 to Length(toDecode) do
  begin
    // Replaces keyset.IndexOf. Handles no match found in KeySet just in case.
    c := Pos(toDecode[idx], KeySet);
    if c > 0 then
      Temp := Temp + KeySet[c];
  end;
  // Handles no values set in result by returning 0
  Result := StrToIntDef(Temp, 0);
end;

function ReverseString(stringToReverse: string): string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(stringToReverse) do
    Result := stringToReverse[i] + Result;
end;

procedure GetLocationFromAuthenticationID;
var
  registryValue: string;
  value1, value2, keyset: string;
  valuesReversed: string;
  values: string;
  authID: LongInt;
  locationID: Integer;
begin
  // GetAuthIDFromRegistry code not provided in question.
  // See InnoSetup Help File, Pascal Scripting: Support Functions Reference,
  //   subheading "Registry functions"
  registryValue := GetAuthIDFromRegistry;
  value1 := ReverseString(registryValue);

  // Delphi strings are 1 based, as opposed to the C# char array's 0 base
  value2 := Copy(value1, 1, 12);
  keyset := ReverseString(value2);

  valuesReversed := Copy(Value1, 13, Length(value1) - 12);
  values := ReverseString(valuesReversed);
  authID := DecodeAuthID(keyset, values);
  locationID := authID - (authID - 1);
end;

此处不包含源代码的所有函数在InnoSetup帮助文件的“Pascal脚本:支持函数参考”中列出为受支持.

如果pascal samaritan仍然难以捉摸,您可以使用c作为中间人。Inno安装程序使用pascal的一个子集编写脚本,对安装程序执行自定义逻辑。因此OP可能不是首选使用它!我决定在安装中不使用pascal。如果pascal samaritan仍然难以捉摸,您可以使用c作为中间人。Inno Setup使用Pascal的一个子集编写脚本来对安装程序执行自定义逻辑。因此OP可能不是首选使用它!我决定在我的设置中不使用Pascal。是的,我决定不使用它。现在我只需要使用Inno设置来创建一些注册表项。Prism/Oxygene是一种非常不正常的方言,实际上无法与e交换它是Delphi或任何其他pascal。是的,我决定不使用它。现在我只需要使用Inno设置来创建一些注册表项。Prism/Oxygene是一种非常不正常的方言,实际上无法与Delphi或任何其他pascal进行交换。:)不客气。如果有什么事情不起作用,而你又无法解决,请在这里发表评论,我看看是否能帮上忙。:)不客气。如果有些东西不起作用,而你无法解决它,请在这里发表评论,我会看看是否能帮上忙。