3

Visual Basic "Space" 函数返回一个由指定数量的空格组成的字符串。

Visual Basic 示例:

Property Get Sections() As String
Dim sBuf As String
Dim iSize As String
Dim iRetCode As Integer
    sBuf = Space$(8192)
    iSize = Len(sBuf)
    iRetCode = GetPrivateProfileString(0&, 0&, m_sDefault, sBuf, iSize, m_sPath)
    If (iSize > 0) Then
        Sections = Left$(sBuf, iRetCode)
    Else
        Sections = ""
    End If
End Property

“空间”的德尔福等价物是什么?谢谢。

4

3 回答 3

6

要回答直接问题,最接近的等价物是StringOfChar

sBuf := StringOfChar(' ', 8192);

虽然如果您将问题中的代码翻译成 Delphi,您不会用空格填充字符串。VB 代码实际上对分配字符串时包含的内容并不感兴趣,它只是Space$用作分配特定长度字符串的一种简单方法。空格被 API 调用返回的字符串覆盖。

在 Delphi 中,您将通过编写以下方式分配长度为 8192 的字符串:

SetLength(sBuf, 8192);

实际上,在 Delphi 中,您将使用TIniFile从 INI 文件中读取。因此,如果您实际上是在尝试翻译问题中的代码,我建议您不要这样做,而是使用 Delphi 的内置库。

于 2013-03-26T14:17:45.853 回答
3

你可以使用StringOfChar

// set txt to 80 spaces
txt := StringOfChar(' ', 80);
于 2013-03-26T14:18:36.730 回答
-1

或者你可以使用这个功能..

 function FastDupeCharA(Chr:Char;n:integer):string;assembler;
asm
 PUSH EBX
 PUSH ESI
 PUSH EDI
 XOR EBX,EBX

 MOV BL,AL
 MOV EDI,ECX
 MOV EAX,ECX
 MOV ESI,EDX
 XOR ECX,ECX
 CALL SYSTEM.@LSTRSETLENGTH
 MOV EDI,[EDI]

 MOV BH,BL  {Fill EBX  with BL (Char)}
 PUSH BX
 SHL EBX,16
 POP BX

 CMP ESI,8
 JLE @DupCarefully
 MOVD MM0,EBX
 PUNPCKLWD MM0, MM0

 @NextFill:
 MOVQ [EDI], MM0  {Fill 8 Char}
 ADD EDI,8
 SUB ESI,8
 CMP ESI,8
 JGE @NextFill
 EMMS
 TEST ESI,ESI
 JNE @DupCarefully
 JMP @FIN

 @DupCarefully:
 {If n or esi is smal than 8 }
 MOV [EDI],BL
 DEC ESI
 JE @FIN
 MOV [EDI+1],BL
 DEC ESI
 JE @FIN
 MOV [EDI+2],BL
 DEC ESI
 JE @FIN
 MOV [EDI+3],BL
 DEC ESI
 JE @FIN
 MOV [EDI+4],BL
 DEC ESI
 JE @FIN
 MOV [EDI+5],BL
 DEC ESI
 JE @FIN
 MOV [EDI+6],BL
 DEC ESI
 JE @FIN
 MOV [EDI+7],BL
 DEC ESI
 JE @FIN
 MOV [EDI+8],BL
 DEC ESI
 JE @FIN

 @FIN:
 MOV EAX,[EDI]
 POP EDI
 POP ESI
 POP EBX
 end;
于 2013-03-26T20:09:48.370 回答