Страница 1 из 1

Несоответствие типов в CopyFile

СообщениеДобавлено: 28.12.2007 13:46:41
Герасим
В проекте Delphi этот код компилится и работает:
NewFileName:string;
SourceFileName:string;
....
CopyFile(PChar(SourceFileName), PChar(NewFileName), false);

Портирую в FPC, получаю:
FilesNames.pas(408,12) Error: Illegal type conversion: "ShortString" to "^Char"

Чего он от меня добивается? Пробовал разные варианты преобразования типов (в ascdef.inc функция описана как
function CopyFile(lpExistingFileName:LPCSTR; lpNewFileName:LPCSTR; bFailIfExists:WINBOOL):WINBOOL; external 'kernel32' name 'CopyFileA';
)
ничего не помогает :-(

СообщениеДобавлено: 28.12.2007 14:05:36
Attid
если портируешь то почитай про волшебную дериктиву
{mode deplhi}

СообщениеДобавлено: 28.12.2007 14:07:29
Sergei I. Gorelkin
Надо включить режим AnsiStrings, а также, скорее всего, и режим компиляции objfpc или delphi ({$mode delphi}{$H+} в начале файла или -Sdh в командной строке).

Re: Несоответствие типов в CopyFile

СообщениеДобавлено: 28.12.2007 14:12:31
Герасим
CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);
вот такая конструкция проверку на синтаксические ошибки прошла, работает или нет даже не могу сказать, так как при портировании возникли уже другие трудности, открываю другую ветку

AnsiStrings тоже помогло

СообщениеДобавлено: 08.01.2008 13:52:57
divinusproject
Сомневаюсь, что из этого выйдет что-то хорошее :)
CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);

Re: Несоответствие типов в CopyFile

СообщениеДобавлено: 22.01.2008 17:44:25
Vlad04
Герасим писал(а):CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);


На мой взгляд правильнее будет написать
CopyFile(PChar(@SourceFileName[1]), PChar(@NewFileName[1]), false);

Т.к. в Дельфи короткая строка начинается с количества символов.

СообщениеДобавлено: 22.01.2008 18:35:43
shade
Код: Выделить всё
procedure MyCopyFile(const s1, s2: AnsiString; FailIfExists: Boolean);
begin
  CopyFile(pchar(s1), pchar(s2), FailIfExists);
end;