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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

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

Сообщение Герасим »

В проекте 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';
)
ничего не помогает :-(
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

если портируешь то почитай про волшебную дериктиву
{mode deplhi}
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

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

Сообщение Герасим »

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

AnsiStrings тоже помогло
divinusproject
новенький
Сообщения: 49
Зарегистрирован: 16.05.2006 08:25:02
Откуда: Барнаул
Контактная информация:

Сообщение divinusproject »

Сомневаюсь, что из этого выйдет что-то хорошее :)
CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);
Аватара пользователя
Vlad04
новенький
Сообщения: 80
Зарегистрирован: 11.12.2007 20:11:19
Откуда: Караганда. Казахстан

Сообщение Vlad04 »

Герасим писал(а):CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);


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

Т.к. в Дельфи короткая строка начинается с количества символов.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Код: Выделить всё

procedure MyCopyFile(const s1, s2: AnsiString; FailIfExists: Boolean);
begin
  CopyFile(pchar(s1), pchar(s2), FailIfExists);
end;
Ответить