Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при получении адреса функции библиотеки

24K
26 ноября 2007 года
rudeman
13 / / 21.09.2007
Добрый день! Подскажите пожалуйста, почему возникает ошибка..

Код следующий...
Цитата:

typedef int ( *PFN_MyFunction)(char *, int *, char * ,int *,char *, int *);

HINSTANCE hCreateCred;
if((hCreateCred=LoadLibrary("CreateCred.dll"))==NULL) return 1;
::PFN_MyFunction pfnMyFunction;
pfnMyFunction=(PFN_MyFunction)::GetProcAddress(hCreateCred,"InitCred");
int iCode=(*pfnMyFunction)("I00001", &id_len, "InitCred()", 0, "INFINITE",0);
::FreeLibrary(hCreateCred);


И при попытке получить адрес функции идет - скидывает его на 0 и далее выдает access violation...
Def файла для библиотеки загружаемой нету...

354
26 ноября 2007 года
ШпиЁн
468 / / 19.02.2006
просмотреть что за функции находятся в библиотеке можно с помощью Depends, входит в состав любой студии.
к тому же, необходимо указать __cdecl или __stdcall при объявлении прототипа.
24K
26 ноября 2007 года
rudeman
13 / / 21.09.2007
Спасиб, с тем разобрался...
Появилась правда другая "проблема"..
Вызов функции библиотеки происходит нормально, но окончивается "криво".
При дебаге вызов идет вроде нормально, функция запускается нужная с нужными параметрами
Цитата:

int iCode=(*pfnMyFunction)("I00001", &id_len, "InitCred()", 0, "INFINITE",0);


но не доходя до

Цитата:

::FreeLibrary(hCreateCred);


сразу выбивает

Цитата:

Microsoft® ActiveX Control Test Container - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.


и

Цитата:

Инструкция по адресу "0x73d911c7" обратилась к памяти по адресу "0x00000004". Память не может быть "read"



не подскажете изза чего? Оо

534
28 ноября 2007 года
HarryAxe
448 / / 19.01.2006
(*pfnMyFunction)("I00001", &id_len, "InitCred()", 0, "INFINITE",0) - неверно. Функция вызывается через указатель указанием его имени и параметров, ничего более:
pfnMyFunction("I00001", &id_len, "InitCred()", 0, "INFINITE",0);

Кроме того, укажи в определении указателя способ вызова функции, если таковой указывается в её реализации в dll. Например,
typedef int (__stdcall * PFN_MyFunction)(char *, int *, char * ,int *,char *, int *);
24K
28 ноября 2007 года
rudeman
13 / / 21.09.2007
Функция выполняется что так что так... но ошибку эту выдает всеравно (( Это при том, что тайпдеф прописан...
Проблема в том, что у меня нет исходников самой подгружаемой библиотеки... Может ли быть что функция эта чтот еще возвращает "не в тему"?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог