![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi XE4 функция StrPCopy не рекомендована [D2005, NT4]
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]та что здесь неверного?