информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?Все любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Как вызвать функцию с параметрами из сторонней DLL? 29.09.09 06:57  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 29.09.09 07:06  Количество правок: 5
<"чистая" ссылка> <обсуждение закрыто>
Есть DLL, в которой есть две функции, которые объявлены вот так:
extern "C" __declspec(dllexport) int process(int width, int height, char* buffer);
extern "C" __declspec(dllexport) void init();

---

Я подключаю их к своей программе следующим образом:
HINSTANCE hinstDll
hinstDll = LoadLibrary("myDll.dll");

void (__stdcall *init)();
int  (__stdcall *process)(int width, int height, char* buffer);
init = (void (__stdcall *)()) GetProcAddress(hinstDll, "init");
process = (int  (__stdcall *)(int width, int height, char* buffer)) GetProcAddress(hinstDll, "process");

---

Затем обращаюсь к ним:
char szBuf[100];
init();
process(10, 10, szBuf);

---

Первая функция отрабатывает коректно, а вот со второй проблемы: если оставить только числовые параметры, то всё работает нормально, но когда у этой функции есть параметр-указатель, то при попытке обращения к этой функции выскакивает окно с ошибкой "Debug Error". Вот, что там написано:
Program: myprogram.exe
Module:
File: i386\checkesp.c
Line:42

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

---

Даже если я в самом начале функции process ставлю return (т.е. не выполняю никаких действий) ошибка продолжает появляться. Такое ощущение, что ошибка возникает ещё до входа в функцию.

Что делать?
Почитай все таки чего нибудь общеобразовательного. Нет, правда 29.09.09 09:51  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Почитай про соглашения о вызовах. В частности чем отличаются __cdecl от __stdcall
> Первая функция отрабатывает коректно, а вот со второй
У нее нет аргументов, соответственно __cdecl для такой функции идентичен __stdcall

> проблемы: если оставить только числовые параметры, то всё
> работает нормально, но когда у этой функции есть
> параметр-указатель, то при попытке обращения к этой функции
> выскакивает окно с ошибкой "Debug Error". Вот, что там
> написано:
>
> Program: myprogram.exe
> Module:
> File: i386\checkesp.c
> Line:42
> 
> The value of ESP was not properly saved across function
> call. This is usually a
> result of calling a function declared with one calling
> convertion with a function
> pointer declared with a different calling convertion.
> 

---
Вот здесь тебе прямым текстом сказали в чем проблема. Не понимаю почему так трудно почитать чего нибудь по теме.

> Даже если я в самом начале функции process ставлю return
> (т.е. не выполняю никаких действий) ошибка продолжает
> появляться. Такое ощущение, что ошибка возникает ещё до
> входа в функцию.
Нет, ломается после выхода (return то ты все равно ставишь).

> Что делать?
Больше читать, меньше писать
попробую учесть. Спасибо, сэнсэй. 29.09.09 15:29  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach