如何将一些C#代码转换为Pascal?
我有两个函数需要转换为Pascal以包含在inno安装程序中,以便在安装时验证序列号 任何帮助都将不胜感激,因为我已经有8年没有写过任何pascal了 这是C代码如何将一些C#代码转换为Pascal?,c#,pascal,C#,Pascal,我有两个函数需要转换为Pascal以包含在inno安装程序中,以便在安装时验证序列号 任何帮助都将不胜感激,因为我已经有8年没有写过任何pascal了 这是C代码 public静态长DecodeAuthID(字符串键集、字符串待编码) { StringBuilder retval=新建StringBuilder(); for(int i=0;i
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进行交换。:)不客气。如果有什么事情不起作用,而你又无法解决,请在这里发表评论,我看看是否能帮上忙。:)不客气。如果有些东西不起作用,而你无法解决它,请在这里发表评论,我会看看是否能帮上忙。