C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отказано в доступе  (Прочитано 1526 раз)
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


Отказано в доступе
« : 15 Май 2013, 15:35:34 »

Здравствуйте! Подскажите, пожалуйста почему код, выполняющийся в Win7 вызывает Отказано в доступе в Win XP

Код
TODFPro *ODF_ThreadPro = new TODFPro(true,
ODFProPanel->Handle,
true, Source, Dest,
0, AllRenameR, false, LongNameR);
int id_Thread = ODF_ThreadPro->ThreadID;
ODFProPanel->Tag = id_Thread;
ODFProPanel->ODFProPanelButton1->Tag = id_Thread;
ODFProPanel->ODFProPanelButton2->Tag = id_Thread;
ODFProPanel->ODF_ThreadProO = ODF_ThreadPro;
ODF_ThreadPro->FreeOnTerminate = true;
 
Код
HANDLE thH = OpenThread(THREAD_ALL_ACCESS, false, ODFProPanelButton1->Tag);
if (thH) {
...
ResumeThread(thH);
}
else {     [color=red]КАК РАЗ ВОТ ЗДЕСЬ[/color]
String Error_String = SysErrorMessage (GetLastError());
VOID SetLastError (IN DWORD dwErrCode);
Application->MessageBox(Error_String.w_str(),
L"Запуск операции",
MB_OK + MB_ICONERROR + MB_APPLMODAL +
MB_TOPMOST);
}
CloseHandle(thH);
« Последнее редактирование: 18 Май 2013, 02:39:32 от volvo877 » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Отказано в доступе
« Ответ #1 : 16 Май 2013, 11:12:06 »

Что это за строка? 
Код
VOID SetLastError (IN DWORD dwErrCode);
 

Где определение класса TODFPro? Зачем смешиваются операции с потоками на WinAPI и VCL?
Записан
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


Re: Отказано в доступе
« Ответ #2 : 17 Май 2013, 03:04:21 »

Код
HANDLE thH = OpenThread(0x0002, false, ODFProPanelButton1->Tag);
if (thH) {
if (ODFProPanelTrackBar->Value == 0) SetThreadPriority(thH, tpIdle);
if (ODFProPanelTrackBar->Value == 1) SetThreadPriority(thH, tpLowest);
if (ODFProPanelTrackBar->Value == 2) SetThreadPriority(thH, tpLower);
if (ODFProPanelTrackBar->Value == 3) SetThreadPriority(thH, tpNormal);
if (ODFProPanelTrackBar->Value == 4) SetThreadPriority(thH, tpHigher);
if (ODFProPanelTrackBar->Value == 5) SetThreadPriority(thH, tpHighest);
if (ODFProPanelTrackBar->Value == 6) SetThreadPriority(thH, tpTimeCritical);
// --------------------------------------------------------------------
ResumeThread(thH);
}
else {
String Error_String = SysErrorMessage (GetLastError());
VOID SetLastError (IN DWORD dwErrCode);
Application->MessageBox(Error_String.w_str(),
L"Запуск операции",
MB_OK + MB_ICONERROR + MB_APPLMODAL +
MB_TOPMOST);
}
CloseHandle(thH);
Проблема была в константе
« Последнее редактирование: 18 Май 2013, 02:39:53 от volvo877 » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Отказано в доступе
« Ответ #3 : 18 Май 2013, 21:20:17 »

Замени этот индуизм:
Код
if (ODFProPanelTrackBar->Value == 0) SetThreadPriority(thH, tpIdle);
if (ODFProPanelTrackBar->Value == 1) SetThreadPriority(thH, tpLowest);
if (ODFProPanelTrackBar->Value == 2) SetThreadPriority(thH, tpLower);
if (ODFProPanelTrackBar->Value == 3) SetThreadPriority(thH, tpNormal);
if (ODFProPanelTrackBar->Value == 4) SetThreadPriority(thH, tpHigher);
if (ODFProPanelTrackBar->Value == 5) SetThreadPriority(thH, tpHighest);
if (ODFProPanelTrackBar->Value == 6) SetThreadPriority(thH, tpTimeCritical);
 

на:
Код
SetThreadPriority(thH, reinterpret_castTThreadPriority>(ODFProPanelTrackBar->Value));
 
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #4 : 18 Май 2013, 21:22:27 »

И еще, я все-таки так и не понял, что это такое:
Код
VOID SetLastError (IN DWORD dwErrCode);
 
?

Что за "VOID", "IN", "DWORD" в вызове? Это сильно смахивает на объявление функции, которое здесь не в Красную Армию...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.131 секунд. Запросов: 21.