I have Delphi 2007 code that looks like this:
procedure WriteString(Stream: TFileStream; var SourceBuffer: PChar; s: string);
begin
StrPCopy(SourceBuffer,s);
Stream.Write(SourceBuffer[0], StrLen(SourceBuffer));
end;
I call it like this:
var
SourceBuffer : PChar;
MyFile: TFileStream;
....
SourceBuffer := StrAlloc(1024);
MyFile := TFileStream.Create('MyFile.txt',fmCreate);
WriteString(MyFile,SourceBuffer,'Some Text');
....
This worked in Delphi 2007, but it gives me a lot of junk characters in Delphi 2010. I know this is due to unicode compliance issues, but I am not sure how to address the issue.
Here is what I’ve tried so far:
-
Change the data type of
SourceBuffer(and also the parameter
expected by WideString) to PWideChar -
Every one of the suggestions listed
here
What am I doing wrong?
You don’t need a separate buffer to write a string to a stream. Probably the simplest way to do it is to encode the string to UTF8, like so:
I’ve declared TStreamEx as a class helper for TStream, but it shouldn’t be too difficult to rewrite these as a solo procedure and function like your example.