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

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

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

Несоответствие типов в 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';
)
ничего не помогает :-(
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение Attid » 28.12.2007 14:05:36

если портируешь то почитай про волшебную дериктиву
{mode deplhi}
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Sergei I. Gorelkin » 28.12.2007 14:07:29

Надо включить режим AnsiStrings, а также, скорее всего, и режим компиляции objfpc или delphi ({$mode delphi}{$H+} в начале файла или -Sdh в командной строке).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение Герасим » 28.12.2007 14:12:31

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

AnsiStrings тоже помогло
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение divinusproject » 08.01.2008 13:52:57

Сомневаюсь, что из этого выйдет что-то хорошее :)
CopyFile(PChar(@SourceFileName), PChar(@NewFileName), false);
divinusproject
новенький
 
Сообщения: 49
Зарегистрирован: 16.05.2006 08:25:02
Откуда: Барнаул

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

Сообщение Vlad04 » 22.01.2008 17:44:25

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


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

Т.к. в Дельфи короткая строка начинается с количества символов.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 78
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Сообщение shade » 22.01.2008 18:35:43

Код: Выделить всё
procedure MyCopyFile(const s1, s2: AnsiString; FailIfExists: Boolean);
begin
  CopyFile(pchar(s1), pchar(s2), FailIfExists);
end;
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 9

Рейтинг@Mail.ru