Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ошибка при работе с DLL


Автор: LexusCheby 30.1.2007, 09:12
Всем доброго времени суток!
Проблема возникает при вызове функции из DLL 
В проекте, где создана DLL эта ф-я описана следующим образом:

void SetMode (unsigned char _Mode)
{
   if (_Mode)
       Mode = 1;
   else
       Mode = 0;
}
где Mode - глобальная переменная
Так вот. Когда клиентская программа делает вызов 
SetMode (1);
Выходит окно сообщения Priveleged Instruction.
После закрытия этого сообщения программа работает правильно. smile

Но уж очень хочется избавиться от этого всплывающего окошка. Help

Автор: LexusCheby 30.1.2007, 12:12
Исправил следующим образом:
Вызов SetMode поместил в блок try
и поставил пустой обработчик исключения catch(EPrivilege &a)

Точно не могу объяснить почему, но ошибка пропала.
Кто знает тонкости винды и работы внешних обработчиков исключений - поясните плиз

Автор: Vyacheslav 30.1.2007, 12:16
Цитата(LexusCheby @  30.1.2007,  12:12 Найти цитируемый пост)
Исправил следующим образом:
Вызов SetMode поместил в блок try
и поставил пустой обработчик исключения catch(EPrivilege &

Это называется, не исправил, а замаскировал. Программа пытается сообщить об Вам об ошибке, а Вы ей : "Наплевать, и так сойдет" smile

Добавлено @ 12:19 
Цитата(LexusCheby @  30.1.2007,  12:12 Найти цитируемый пост)
Точно не могу объяснить почему, но ошибка пропала.

И она не пропала. Вы ее перехватили и утопили. Но от этого ошибка никуда не денется

Автор: LexusCheby 30.1.2007, 13:22
Ну тогда подскажите откуда она берется. DLL никаких ассемблерных строк для работы с com портами не использует. Вызовы других подобных функций ничем не отличаются. Мне кажется это ложное исключение.

Автор: W4FhLF 30.1.2007, 13:22
Надо под отладчиком глянуть в какой ассемблерный код транслируется такая функция, ибо это сообщение об ошибке выползает тогда, когда программа пытается выполнить недопустимую, на пользовательством уровне, команду процессора. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)