информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Почитай все таки чего нибудь общеобразовательного. Нет, правда 29.09.09 09:51  Число просмотров: 1394
Автор: 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 то ты все равно ставишь).

> Что делать?
Больше читать, меньше писать
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach