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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
15-1450042201
Юрий
2015-12-14 00:30
2017.01.15
С днем рождения ! 14 декабря 2015 понедельник


6-1256640553
Encore
2009-10-27 13:49
2017.01.15
Post/get неверная кодировка


2-1423343442
Andrey K
2015-02-08 00:10
2017.01.15
Как работать с портом LAN


15-1457536558
DVM
2016-03-09 18:15
2017.01.15
Как думаете, это ошибка в TPointerStream в VCL?


3-1310747259
Дмитрий
2011-07-15 20:27
2017.01.15
Вылет при изменении данных в гриде (Eh)