Форум: "Начинающим";
Текущий архив: 2014.05.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c