Вверх ↑
Этот топик читают: Гость
Ответов: 1841
Рейтинг: 369
#31: 2011-11-17 12:03:34 ЛС | профиль | цитата

VolList.Items[Control.CurIndex] := dspc + GetLabelDisk(Drv[1], False);
_debug;
ошибка
------------ Дoбавленo в 12.03:
nesco писал(а):
Доходит до второго дебага при вылете

нет
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#32: 2011-11-17 12:04:49 ЛС | профиль | цитата
CriDos писал(а):
ошибка

Сделай так и проверь


VolList.Items[Control.CurIndex] := dspc;
_debug;


карма: 22

0
Ответов: 1841
Рейтинг: 369
#33: 2011-11-17 12:06:26 ЛС | профиль | цитата
операция успешно завершена.
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#34: 2011-11-17 12:11:39 ЛС | профиль | цитата
Лезь в функцию GetLabelDisk() и определи дебагом строку вылета
карма: 22

0
Ответов: 1841
Рейтинг: 369
#35: 2011-11-17 12:18:06 ЛС | профиль | цитата
nesco писал(а):
Лезь в функцию GetLabelDisk() и определи дебагом строку вылета


  _debug; //успешно
if (WinVer <= 4) and (DriveType <> DRIVE_REMOVABLE) or VolReal then
_debug; //не компилируется
begin // Win9x, Me, NT <= 4.0
_debug; //ошибка
карма: 1
0
Ответов: 3889
Рейтинг: 362
#36: 2011-11-17 12:20:30 ЛС | профиль | цитата
nesco писал(а):
Лезь в функцию GetLabelDisk() и определи дебагом строку вылета
1nd1g0 писал(а):
последнее, что делал процесс перед смертью - обращался к LStrCat3 внутри system с целью приклеить два пробела (та самая константа dspc) к конкретной строке, то есть выполнял оператор "+", а уж по какой причине вылетает (например, недупустимый индекс, пустая строка и т.п.) - дело другое

------------ Дoбавленo в 12.20:
То есть у меня не там вылетает, но допускаю, что вылетает из-за недопустимого результата этой функции.
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#37: 2011-11-17 12:27:40 ЛС | профиль | цитата
CriDos, попробуй сделать так, посмотрим



Result := '';
WinVer := LOBYTE(LOWORD(GetVersion));
DriveType := GetDriveType(PChar(Drv + ':\'));

if not VolReal then
Result := '<none>'
else
Result := DisplayName(Drv);

карма: 22

0
Ответов: 1841
Рейтинг: 369
#38: 2011-11-17 12:40:55 ЛС | профиль | цитата
nesco писал(а):
CriDos, попробуй сделать так, посмотрим

запустилось, вроде пока полёт нормальный...
------------ Дoбавленo в 12.40:
только заместо как я понял названия диска, указано <none>
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#39: 2011-11-17 12:42:49 ЛС | профиль | цитата
Попробуй еще вот так


function GetLabelDisk(Drv: Char; VolReal: Boolean): string;
var WinVer: Byte;
DriveType, NotUsed: DWORD;
// Buf: array [0..MAX_PATH - 1] of Char;
Buf: string;
function DisplayName(Drv: Char): string;
var SFI: TSHFileInfo;
begin
FillChar(SFI, SizeOf(SFI), 0);
SHGetFileInfo(PChar(Drv + ':\'), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME);
Result := SFI.szDisplayName;
// Â Win9x, Me - íåò ìåòêè äèñêà -> #32 + (x:)
// Â WinNT 5.x - íåò ìåòêè äèñêà -> Íàçâàíèå óñòðîéñòâà + #32 + (x:)
if Pos('(', Result) <> 0 then
SetLength(Result, Pos('(', Result) - 2);
end;

begin
Result := '';
WinVer := LOBYTE(LOWORD(GetVersion));
DriveType := GetDriveType(PChar(Drv + ':\'));

if {(WinVer <= 4) and }(DriveType <> DRIVE_REMOVABLE) or VolReal then
begin // Win9x, Me, NT <= 4.0
// Buf[0] := #0;
// GetVolumeInformation(PChar(Drv + ':\'), Buf, DWORD(SizeOf(Buf)), nil,
// NotUsed, NotUsed, nil, 0);
SetLength(Buf, MAX_PATH - 1);
GetVolumeInformation(PChar(Drv + ':\'), @Buf[1], MAX_PATH - 1, nil, NotUsed, NotUsed, nil, 0);

Result := Buf;
if VolReal {and (WinVer >= 5)} and (Result <> '') and
(DriveType <> DRIVE_REMOVABLE) then // Win2k, XP è âûøå
Result := DisplayName(Drv)
else if (Result = '') and (not VolReal) then
Result := '<none>';
end
else
Result := DisplayName(Drv);
end;
карма: 22

0
Ответов: 1841
Рейтинг: 369
#40: 2011-11-17 12:49:34 ЛС | профиль | цитата
nesco писал(а):
Попробуй еще вот так

После клика по элементу, сразу же выбивает старый, добрый рантайм
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#41: 2011-11-17 13:00:52 ЛС | профиль | цитата
А так


function GetLabelDisk(Drv: Char; VolReal: Boolean): string;
var WinVer: Byte;
DriveType, NotUsed: DWORD;
Buf: string;
function DisplayName(Drv: Char): string;
var SFI: TSHFileInfo;
begin
FillChar(SFI, SizeOf(SFI), 0);
SHGetFileInfo(PChar(Drv + ':\'), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME);
Result := SFI.szDisplayName;
if Pos('(', Result) <> 0 then
SetLength(Result, Pos('(', Result) - 2);
end;

begin
Result := '';
WinVer := LOBYTE(LOWORD(GetVersion));
DriveType := GetDriveType(PChar(Drv + ':\'));

if VolReal then
begin
SetLength(Buf, MAX_PATH - 1);
Buf[1] := #0;
GetVolumeInformation(PChar(Drv + ':\'), @Buf[1], MAX_PATH - 1, nil, NotUsed, NotUsed, nil, 0);
Result := Buf;

if (Result <> '') and (DriveType <> DRIVE_REMOVABLE) then
Result := DisplayName(Drv)
else
Result := '<none>';
end
else
Result := DisplayName(Drv);
end;
------------ Дoбавленo в 13.00:
Попробуй определить в последнем коде, где вылетает
карма: 22

0
Ответов: 1841
Рейтинг: 369
#42: 2011-11-17 13:03:53 ЛС | профиль | цитата
сразу после запуска, рантайм
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#43: 2011-11-17 13:05:16 ЛС | профиль | цитата
nesco писал(а):
Попробуй определить в последнем коде, где вылетает

карма: 22

0
Ответов: 1841
Рейтинг: 369
#44: 2011-11-17 13:07:30 ЛС | профиль | цитата

begin
DriveType := GetDriveType(PChar(Drv + ':\'));
_Debug;// успешно
if VolReal then
//_Debug; не компилируется
begin
_Debug;//ошибка
SetLength(Buf, MAX_PATH - 1);
карма: 1
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#45: 2011-11-17 13:10:12 ЛС | профиль | цитата
Еще вот так попробуй


begin
Result := '';
WinVer := LOBYTE(LOWORD(GetVersion));
DriveType := GetDriveType(PChar(Drv + ':\'));

if (DriveType <> DRIVE_REMOVABLE) or VolReal then
begin
SetLength(Buf, MAX_PATH - 1);
Buf[1] := #0;
GetVolumeInformation(PChar(Drv + ':\'), @Buf[1], MAX_PATH - 1, nil, NotUsed, NotUsed, nil, 0);
Result := Buf;

if (Result <> '') and (DriveType <> DRIVE_REMOVABLE) then
Result := DisplayName(Drv)
else
Result := '<none>';
end
else
Result := DisplayName(Drv);
end;
------------ Дoбавленo в 13.10:
CriDos писал(а):
_Debug;//ошибка

Какая ошибка
Ты мне скажи, где дебаг меняется на RunTime, хрен с ней с ошибкой
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)