Inno setup 如何使用rtlmovemory()将字符数组转换为字符串?

Inno setup 如何使用rtlmovemory()将字符数组转换为字符串?,inno-setup,pascalscript,Inno Setup,Pascalscript,请看下面我的CharArrayToString() 为此目的声明函数的正确方法是什么,以及如何调用它 [设置] AppName=EmptyProgram AppVerName=EmptyProgram 1 UsePreviousAppDir=false DefaultDirName={pf}\EmptyProgramm 可卸载=false OutputBaseFilename=HelloWorld 所需特权=最低 [留言] SetupAppTitle=我的标题 [守则] 函数lstrlen(lp

请看下面我的
CharArrayToString()

为此目的声明函数的正确方法是什么,以及如何调用它

[设置]
AppName=EmptyProgram
AppVerName=EmptyProgram 1
UsePreviousAppDir=false
DefaultDirName={pf}\EmptyProgramm
可卸载=false
OutputBaseFilename=HelloWorld
所需特权=最低
[留言]
SetupAppTitle=我的标题
[守则]
函数lstrlen(lpString:字符数组
):整数;外部的lstrlenW@kernel32.dllstdcall';
程序rtlmovemory\u ToString(
Dest:字符串;
资料来源:PAnsiChar;
长度:整数
); 外部的RtlMoveMemory@kernel32.dllstdcall';
//-------------------------------------------------------------------------------------------------
//此功能仅用于演示
//-------------------------------------------------------------------------------------------------
过程StringToCharray(const sStr:String;var aCharArray:Char数组);
变量
iLenStr:整数;
iIdx:整数;
开始
iLenStr:=长度(sStr);
如果iLenStr=0,则退出;
设置阵列长度(aCharArray,iLenStr+1);//包括空终止符的房间
对于iIdx:=1到iLenStr do begin
aCharArray[iIdx-1]:=sStr[iIdx];
结束;
阿卡拉雷[iIdx-1]:=#0;
结束;//=>StringToCharArray()
//=================================================================================================
//-------------------------------------------------------------------------------------------------
//此函数是将字符数组转换为字符串的明显解决方案。
//如果可能,我不想使用此功能。
//-------------------------------------------------------------------------------------------------
函数CharArrayToString_已弃用(const acharray:array of Char):String;
变量
iLenCharArray:整数;
iIdx:整数;
开始
iLenCharArray:=lstrlen(aCharArray);
如果iLenCharArray=0,则退出;
SetLength(结果,iLenCharray);
对于iIdx:=0到iLenCharArray-1 do
结果[iIdx+1]:=aCharArray[iIdx];
结束;//=>CharArrayToString_已弃用()
//=================================================================================================
//-------------------------------------------------------------------------------------------------
//我想使用rtlmovemory()来实现这一点,但目前它不起作用。
//为此目的声明RtlMoveMemory()的正确方法是什么,以及如何调用它?
//-------------------------------------------------------------------------------------------------
函数chararray字符串(const acharray:Char数组):字符串;
变量
iLenCharArray:整数;
iIdx:整数;
开始
iLenCharArray:=lstrlen(aCharArray);//此长度不包括空终止符
如果iLenCharArray=0,则退出;
SetLength(结果,iLenCharray);
rtlmovemory_ToString(结果,aCharArray[0],iLenCharArray*2);
结束;//=>chararray字符串()
//=================================================================================================
//-------------------------------------------------------------------------------------------------
程序测试();
变量
aCharArray:字符数组;
字符串;
结果:字符串;
开始
sDummy:=“1234567”;
StringToCharArray(斯杜米,aCharArray);
//假设aCharArray由Windows API函数返回
//当然,这一次成功了
//sResult:=已弃用的字符字符串(aCharArray);
//我需要一个建议,使这个工作
sResult:=字符字符串(aCharArray);
//报告char数组中的结果字符串
MsgBox('String:'+sResult+#13#10+
'长度:'+IntToStr(长度(sResult)),
MB信息,MB_OK);
结束;//=>测试()
//=================================================================================================
函数InitializeSetup():Boolean;
开始
Test();
结果:=假;
结束;

提前感谢。

很高兴,在尝试了几种可能的组合后,我终于成功地使用以下函数将数据从字符的
数组复制到字符串:

程序RtlMM\u CharArrayToStr(
sDest:String;//在
var achSource:Char;//在
常量长度:整数//英寸
); 外部的RtlMoveMemory@kernel32.dllstdcall';
函数chararray字符串(const acharray:Char数组):字符串;
变量
iLenCharArray:整数;
开始
iLenCharArray:=lstrlen(aCharArray);//此长度不包括空终止符
如果iLenCharArray=0,则退出;
SetLength(结果,iLenCharray);
RtlMM_CharArrayToStr(结果,aCharArray[0],iLenCharArray*2);
结束;//=>chararray字符串()
感谢Martin Prikryl的提示

更新 为了完整起见,我使用以下函数将数据从
字符串
复制到
字符数组

程序RtlMM\u strotcharray(
sDest:Char的数组;//在
const sSource:String;//在
常量长度:整数//英寸
); 外部的RtlMoveMemory@kernel32.dllstdcall';
过程StringToCharray(const sStr:String;out acharray:Char数组);
变量
iLenStr:整数;
开始
iLenStr:=长度(sStr);
如果iLenStr=0,则退出;
设置阵列长度(aCharArray,iLenStr+1);//包括一个空终止符的房间
RtlMM_strotchararray(aCharArray、sStr、iLenStr*2);
阿卡拉雷[iLenStr]:=#0;
结束;//=>串串

CharArrayToString\u有什么不推荐的问题?@MartinPrikryl,可能是为了在要转换的数据很大时获得更好的性能。:-)使用
AnsiString
而不是
字符数组
。然后您可以使用