Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2011, 14:51   #1
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию вылетает программа при использовании dll

итак. использую функции из dll.

Код:
typedef void* HID_DEVICE;
DWORD (*_HidDevice_GetNumHidDevices)(WORD, WORD);//вроде как указатель на функцию
 hHidDLL=LoadLibrary("SLABHIDDevice.dll");//загружаем dll
    if(hHidDLL==NULL)
        MessageBox(0, "Не получается загрузить SLABHIDDevice.dll", "Пичалька!",0);
 _HidDevice_GetNumHidDevices=(DWORD (*)(WORD, WORD))GetProcAddress(hHidDLL, "HidDevice_GetNumHidDevices");//ищем саму функцию
листинг только для понимания. нужные переменные глобальные, нужные вещи-локалтные.
ну потом еще проверяю, чтоб указатель на функцию не был равен нулю(что функция нашлась).
далее вызываю функцию- все хорошо. но после сотого-другого вызова функции программа вылетает( ошибка сегментации).
может быть я что не учел?

Последний раз редактировалось Stilet; 25.04.2011 в 12:00.
radiohobbyt вне форума Ответить с цитированием
Старый 22.04.2011, 23:02   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тип передачи параметров какой?
при работе с длл лучше явно его указывать и там и там
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.04.2011, 11:39   #3
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

итак... ответ: я забыл волшебное слово __stdcall

Код:
typedef void* HID_DEVICE;
DWORD (__stdcall *_HidDevice_GetNumHidDevices)(WORD , WORD);//вроде как указатель на функцию
hHidDLL=LoadLibrary("SLABHIDDevice. dll");//загружаем dll
if(hHidDLL==NULL)
MessageBox(0, "Не получается загрузить SLABHIDDevice.dll", "Пичалька!",0);
_HidDevice_GetNumHidDevices=(DWORD (*)(WORD, WORD))GetProcAddress(hHidDLL, "HidDevice_GetNumHidDevices");//ищем саму функцию

Последний раз редактировалось Stilet; 25.04.2011 в 12:00.
radiohobbyt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка (error code 0) при использовании libmysql.dll kr00t БД в Delphi 4 28.04.2011 15:58
Вылетает программа на Ассемблере. f@ntom Помощь студентам 1 02.12.2010 16:11
ошибка dcc70.dll при использовании AnsiUpperCase hello88 Общие вопросы Delphi 8 13.07.2010 16:05
Access violation at address при использовании DLL spamer Общие вопросы Delphi 4 27.08.2009 22:19