Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Typkonvertierung


SebastianVB - So 11.05.03 21:54
Titel: Typkonvertierung
Ich habe ein dynamisches Array vom Typ Char und würde dieses gerne in einen AnsiString konvertieren. Kann mir jemand sagen, wie das auf einfache Weise funktioniert ? Also praktisch:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
...
var pBuffer : Array Of Char;
      strData : AnsiString;
begin

  SetLength(pBuffer, iCount);
  // Aktionen mit pBuffer
  strData := ???

end;


Alni - So 11.05.03 23:24

Schau mal hier das könnte dir weiterhelfen:

http://www.delphi-forum.de/viewtopic.php?t=11120


Delete - Mo 12.05.03 02:11


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
  szBuffer : array [0..255] of Char;
  astr     : AnsiString;
begin
  lstrcpy(szBuffer, 'Hello World');
  astr := String(szBuffer);
  ShowMessage(astr);
end;


SebastianVB - Mo 12.05.03 14:57
Titel: Funktioniert leider nicht :-(
Delphi stürzt in der Zeile, in der nach String konvertiert werden soll, ab. Liegts vielleicht daran, dass es in euren Beispielen ein statisches Array ist, und bei mir ein dynamisches ?

Ich hab folgenden Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var m_paBuffer : Array Of Char

        ....

function CFile.GetData(Start, Length : LongInt) : AnsiString;
var iBytesRead : DWord;
begin

        // Buffer für Daten anlegen
        SetLength(self.m_paBuffer , Length);

        // FilePointer setzen
        SetFilePointer(self.m_hFile, Start, nil, FILE_BEGIN);

        // Daten einlesen
        ReadFile(self.m_hFile, self.m_paBuffer, Length, iBytesRead, nil);

        // Eingelesene Daten zurückgeben
        GetData := String(self.m_paBuffer);  // <--- Absturz

end;


Delete - Di 13.05.03 07:45

Probier´s mal so:

Quelltext
1:
2:
3:
4:
5:
ReadFile(self.m_hFile,
  @self.m_paBuffer[0],
  Length,
  iBytesRead,
  nil);

bzw.

Quelltext
1:
2:
3:
4:
5:
ReadFile(self.m_hFile,
  pointer(@self.m_paBuffer)^,
  Length,
  iBytesRead,
  nil);

Falls es immer noch abstürzt, mach das gleiche auch bei der Zuweisung:

Quelltext
1:
Result := string(@self.m_paBuffer[0]);                    

bspw.