Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi XE4 функция StrPCopy не рекомендована [D2005, NT4]


Страницы:   1 2

SkAndriy ©   (2013-07-28 17:22:00) 

в чем может быть проблема если при компилировании проекта появляется такое предупреждение:

[dcc32 Warning] myunit.pas(88): W1000 Symbol 'StrPCopy' is deprecated: 'Moved to the AnsiStrings unit'

использую Delphi XE4 - в ней нужно функцию StrPCopy заменить на какую-то иную?

спасибо за любую помощь


MBo   (2013-07-29 09:33:00) [1]

Если начали использовать юникодную версию - не надо дёргаться с заплатками - стоит внимательно почитать статьи о переходе на юникод.
Например, отсюда и по ссылкам:
http://www.transl-gunsmoker.ru/2009/09/pchars.html


Германн   (2013-07-28 20:31:00) [2]


>  SkAndriy   (28.07.13 20:03) [20]
>
> пробовал - эффект тот же.
>

Значит неправильно пробовал. Не всебуквы "ANSI" убрал.


Inovet   (2013-07-28 20:23:00) [3]

> [20] SkAndriy   (28.07.13 20:03)
> есть еще идеи?

Пользоваться юникод версией.


SkAndriy   (2013-07-28 20:03:00) [4]

пробовал - эффект тот же.

есть еще идеи?

спасибо


Германн   (2013-07-28 19:12:00) [5]

Самое логичное это убрать из этого кода все Ansi а StrPCopy и StrPas заменить на то что предложил RWolf ©   (28.07.13 18:02) [9]


SkAndriy   (2013-07-28 18:40:00) [6]

пожалуйста:

function OpenSaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string; IsOpenDialog: Boolean): Boolean;
var
 ofn: TOpenFileName;
 szFile: array[0..MAX_PATH] of AnsiChar;
begin
 Result := False;
 FillChar(ofn, SizeOf(TOpenFileName), 0);
 with ofn do
 begin
   lStructSize := SizeOf(TOpenFileName);
   hwndOwner := ParentHandle;
   lpstrFile := szFile;
   nMaxFile := SizeOf(szFile);
   if (Title <> '') then
     lpstrTitle := PAnsiChar(AnsiString(Title));
   if (InitialDir <> '') then
     lpstrInitialDir := PAnsiChar(AnsiString(InitialDir));
   StrPCopy(lpstrFile, AnsiString(FileName));
   lpstrFilter := PAnsiChar(AnsiString(CharReplace(Filter, '|', #0)+#0#0));
   if DefExt <> '' then
     lpstrDefExt := PAnsiChar(AnsiString(DefExt));
 end;
 if IsOpenDialog then
 begin
   if GetOpenFileName(ofn) then
   begin
     Result := True;
     FileName := StrPas(szFile);
   end;
 end
 else
 begin
   if GetSaveFileName(ofn) then
   begin
     Result := True;
     FileName := StrPas(szFile);
   end;
 end
end;

здесь ругается на StrPCopy и все StrPas.

теперь понятнее?

спасибо


Германн   (2013-07-28 18:36:00) [7]


> SkAndriy   (28.07.13 18:31) [15]
>
> а решить эту проблему с имеющимися параметрами нельзя?
>

А проблему ты до сих пор не озвучил хотя уже в первом ответе про это спросили.

Приведи код, который ты откуда-то скопипастил и пытаешься применить для своих целей. Тогда можно будет помочь.


SkAndriy   (2013-07-28 18:35:00) [8]

вот так почему-то работает: FileName := String(szFile);

это верно? и как второе исправить выражение :

lpstrFile := PAnsiChar(filename); - Suspicious typecast of string to PAnsiChar

спасибо


SkAndriy   (2013-07-28 18:31:00) [9]

а решить эту проблему с имеющимися параметрами нельзя?

спасибо


Германн   (2013-07-28 18:29:00) [10]


> SkAndriy   (28.07.13 18:23) [12]
>
> к сожалению условия менять нельзя var FileName: string;
> только String!
>

Почему нельзя? Чем string в твоей версии Дельфи отличается от Ansistring знаешь?


SkAndriy   (2013-07-28 18:25:00) [11]

новое предупреждение от компилятора:

lpstrFile := PAnsiChar(filename); - Suspicious typecast of string to PAnsiChar

спасибо за помощь


SkAndriy   (2013-07-28 18:23:00) [12]

к сожалению условия менять нельзя var FileName: string; только String!

спасибо


Германн   (2013-07-28 18:22:00) [13]

var FileName: Ansistring;
   szFile: array[0..MAX_PATH] of AnsiChar;
   lpstrFile : PAnsiChar;

FileName := szFile;
lpstrFile := PAnsiChar(filename);


SkAndriy   (2013-07-28 18:16:00) [14]

var FileName: string;
    szFile: array[0..MAX_PATH] of AnsiChar;
    lpstrFile : PAnsiChar;

FileName := szFile; - Implicit string cast from 'AnsiChar' to 'string'
lpstrFile := PChar(filename); - Incompatible types: 'PAnsiChar' and 'PWideChar'

есть решения решения?

спасибо


RWolf   (2013-07-28 18:02:00) [15]


> какие альтернативы StrPCopy и StrPas в таком случае?

FileName := szFile;
lpstrFile := PChar(filename);


Германн   (2013-07-28 17:49:00) [16]


> та что здесь неверного?

То что эту функцию следовало бы забыть уже очень давно. В Д2 она уже стала не нужна.


SkAndriy   (2013-07-28 17:48:00) [17]

хорошо я понимаю, тогда какие альтернативы StrPCopy и StrPas в таком случае? чем их можно заменить, типы переменных я описал выше.

спасибо


megavoid   (2013-07-28 17:45:00) [18]

> та что здесь неверного?
Deprecated - то, что в XE5, 7, ...10 можно при переносе проекта столкнуться с некомпилируемым кодом - то есть пока живёт в VCL.AnsiStrings, а дальше - не факт, что будет жить


Inovet   (2013-07-28 17:44:00) [19]

> [4] SkAndriy   (28.07.13 17:42)
> та что здесь неверного?

Зависит от задачи.


SkAndriy   (2013-07-28 17:42:00) [20]

та что здесь неверного?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо