Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.05.18;
Скачать: CL | DM;

Вниз

Delphi XE4 функция StrPCopy не рекомендована   Найти похожие ветки 

 
SkAndriy   (2013-07-28 17:22) [0]

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

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

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

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


 
MBo ©   (2013-07-28 17:28) [1]

А какая задача стоит?


 
SkAndriy   (2013-07-28 17:39) [2]

вот такая:

var FileName: string;
    lpstrFile : PAnsiChar;

StrPCopy(lpstrFile, AnsiString(FileName));

и на  это такие сообщения:

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

и еще попутно далее на строку:

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

FileName := StrPas(szFile);

выдает следующее сообщение:

[dcc32 Warning] myunit.pas(98): W1000 Symbol "StrPas" is deprecated: "Moved to the AnsiStrings unit"

как решить проблему?

спасибо


 
Inovet ©   (2013-07-28 17:41) [3]

> [2] SkAndriy   (28.07.13 17:39)
> вот такая:

Это не задача, а решение.


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

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


 
Inovet ©   (2013-07-28 17:44) [5]

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

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


 
megavoid ©   (2013-07-28 17:45) [6]

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


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

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

спасибо


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


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

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


 
RWolf ©   (2013-07-28 18:02) [9]


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

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


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

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"

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

спасибо


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

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

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


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

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

спасибо


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

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

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

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


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


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

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


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

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

спасибо


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

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

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

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

спасибо


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


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

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

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


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

пожалуйста:

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 19:12) [19]

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


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

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

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

спасибо


 
Inovet ©   (2013-07-28 20:23) [21]

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

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


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


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

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


 
MBo ©   (2013-07-29 09:33) [23]

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



Страницы: 1 вся ветка

Текущий архив: 2014.05.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
2-1375017722
SkAndriy
2013-07-28 17:22
2014.05.18
Delphi XE4 функция StrPCopy не рекомендована


6-1272272116
Дмитрий Белькевич
2010-04-26 12:55
2014.05.18
Indy 10 обновляется?


15-1384633802
Юрий
2013-11-17 00:30
2014.05.18
С днем рождения ! 17 ноября 2013 воскресенье


2-1375088425
Вова
2013-07-29 13:00
2014.05.18
Помогите перевести с Java на Delphi


2-1375356989
14
2013-08-01 15:36
2014.05.18
Событие OnChange у DateTimePicker