Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизAV после вызова GetTempFileNameW Найти похожие ветки
← →
Псб (2015-01-16 19:09) [0]Здравствуйте. В неюникодных версиях Delphi этот код работает нормально, а в Delphi XE7 вызывает AV:
procedure TForm1.Button1Click(Sender: TObject);
var
szTempPath, szTmpFile: array[0..MAX_PATH] of Char;
begin
if GetTempPath(SizeOf(szTempPath), szTempPath) > 0 then
begin
ShowMessage(szTempPath);
if GetTempFileName(szTempPath, "~", 0, szTmpFile) > 0 then
ShowMessage(szTmpFile);
// после происходит AV и программа завершается с ошибкой
end;
end;
Что я делаю не так?
← →
MBo © (2015-01-16 19:38) [1]if GetTempPath(MAX_PATH, ...
← →
Псб (2015-01-16 20:06) [2]
> MBo © (16.01.15 19:38) [1]
>
> if GetTempPath(MAX_PATH, ...
Спасибо. Так работает.
Попробовал сделать так:
procedure TForm1.Button1Click(Sender: TObject);
const
a = 100;
var
szTempPath, szTmpFile: array[0..a-1] of Char;
begin
if GetTempPath(a, szTempPath) > 0 then
begin
//ShowMessage(szTempPath);
if GetTempFileName(szTempPath, "~", 0, szTmpFile) > 0 then
ShowMessage(szTmpFile);
end;
end;
Я так понял юникодная версия функции требует строго константу в качестве размера буфера, а ANSI без разницы?
Извиняюсь за назойливость, просто впервые с этим столкнулся :)
← →
Псб (2015-01-16 20:23) [3]Вопрос снимается SizeOf(Char) = 2
Т.е можно и так написать:
if GetTempPath(SizeOf(szTempPath) div 2, szTempPath) > 0 then
← →
MBo © (2015-01-16 21:24) [4]
> Я так понял юникодная версия функции требует строго константу
> в качестве размера буфера, а ANSI без разницы?
Не в константе дело - размер указывается в символах, а не в байтах.
из MSDN:
GetTempPath
nBufferLength [in]
The size of the string buffer identified by lpBuffer, in TCHARs.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.053 c