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

Ваш аккаунт

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

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

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

Соглашение функций при вызове DLL

24K
29 ноября 2007 года
rudeman
13 / / 21.09.2007
Подскажите пожалуйста, как правильно вызвать функцию...
Выдает ошибку
Цитата:

The value of ESP was not properly saved across function call. This is usually a result of calling a function with one calling convention with a function pointer with a function pointer declared with a calling convention


DLL написана на С++, исходников увы нет... есть тока .h файл и то "недодефайненый".. в нем

 
Код:
int __stdcall InitCredA_
(
    LPSTR   ioIdBuf,
    LPDWORD ioIdLenPtr,
    LPCSTR  inPrompt,
    LPCSTR  inPathToIcon,
    DWORD   inWaitTimeout,
    WORD        inNum
) ;


Я сделал
 
Код:
typedef int (__stdcall *PFN_MyFunction1)(char[7] ,int *, char *, char *, int, int *);

и вызвал как
 
Код:
int iCode=(pfnMyFunction1)("I00001", &id_len, 0, 0, INFINITE, 0);

Функция вызывается, но после нее выдает ошибку эту.. как я понимаю при очистке стека.
3
29 ноября 2007 года
Green
4.8K / / 20.01.2000
Здесь скорее всего проблема с количеством аргументов и тем, кто очищает стек.
Посмотри (отладчиком или дизассемблером), что вызывается при выходе из функции. Если это ret, то стек должен очищать вызывающий код, и функция описана неверно.
Если же там ret 18h, а именно это и должно быть по виду функции, то все ок.
1.8K
30 ноября 2007 года
_const_
229 / / 26.11.2003
Так неверно же указаны параметры. Не мудри - как в хедере указано, так и пиши. Если же не охота использовать WinAPI типы, то приводи их корректно:
 
Код:
//typedef int (__stdcall *PFN_MyFunction1)(char[7] ,int *, char *, char *, int, int *);
typedef int (__stdcall *PFN_MyFunction1)(char *, unsigned long, const char *, const char *, unsigned long, unsigned short);
3
30 ноября 2007 года
Green
4.8K / / 20.01.2000
В данном случае это не могло быть причиной креша стека.
При условии корректной работы самой функции.
24K
30 ноября 2007 года
rudeman
13 / / 21.09.2007
Спасиб, перестал мудрить и прошло ))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог