Witam!
Tak jak w temacie, czemu oni się gryzą?
Napisałem sobie jakiś czas temu aplikację w delphi 7, fajerwerki z nowszych wersji zazwyczaj nie są mi potrzebne bo to prosty program. Jednak chciałem go przekompilować w wersji 2009 ze względu na to że czytałem iż ona pozwala na późniejsze uruchomienie aplikacji na windows 64 bit, na czym mi bardzo zależy.
Ale jak to zwykle bywa pojawił się problem :/ Kompilator nie chce przepuścić tylko jednej funkcji, jednak jest ona kluczowa dla działania programu :( Program wykorzystuje komendy wiersza poleceń, które obsługuję za pomocą pajpów(pipe). Całośc jest ok, jednak problem pojawia się podczas odczytu zwróconego rezultatu. Błąd wywala na funkcji OemToAnsi.
...
var
ReadPipe, WritePipe : THandle;
Buffer : PChar;
BytesRead : DWord;
...
...
function ReadResult : PChar;
begin
repeat
BytesRead := 0;
ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer, Buffer); // klapa
result := Buffer;
until
(BytesRead < ReadBuffer);
end;
...
Nie pasują mu typy danych, ja mu zapodaję PChar kiedy on sobie by życzył AnsiChar.
[DCC Error] Main.pas(123): E2010 Incompatible types: 'Char' and 'AnsiChar'
Czy zna ktoś może jakiś sposób żeby sobie z tym poradzić, może istnieje jakaś inna funkcja służąca do tego? Może ktoś z was się już z tym spotkał?
Szukałem o tym na forum i na googlach więc "nie bijcie", jedyne co znalazłem to podobne pytania, jednak bez odpowiedzi.
// edit
Pogrzebałem trochę bardziej na forum i coś znalazłem (ręcznie, wyszukiwarka chyba mnie nie lubi), wygląda to nawet zachęcająco:
function StrToPAnsiChar(dane:string):PAnsiChar;
var buf: array[0..1000] of char;
i : integer;
begin
for i:=0 to 1000 do buf[i]:=#0; { musi być zerowanie bufora, patrz info na dole }
for i:=0 to length(dane) do
begin
buf[i]:=dane[i+1];
StrToPAnsiChar:=buf;
end;
end;
Ale mimo wszystko kompilator tego też nie chce łyknąć :/
[DCC Error] Main.pas(125): E2010 Incompatible types: 'Array' and 'PAnsiChar'
Pozdrawiam!