информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаГде водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft прикрывает Visual Studio... 
 Умер Кевин Митник 
 Массовое внедрение вредоносного... 
главная обзор 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-2023 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach