Creo que el caso que describes marcos es diferente, en tu caso el problema es que el archivo utiliza un juego de caracteres diferente al que usa windows, mientras que, segun lo entiendo yo, el problema en en este caso es que se utiliza una codificacion diferente.
De todas formas, esto ¿seguro que te funciona?

:
Código Delphi
[-]
procedure TForm1.Button2Click(Sender: TObject);
var
s:Pchar;
begin
OemToChar(PChar(Memo1.Lines[2]),PChar(s));
ShowMessage(s);
end;
Porque ahí s esta apuntando a una posición de memoria aleatoria, no a ningún buffer, al menos eso me parece a mi.