Почитай про соглашения о вызовах. В частности чем отличаются __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 то ты все равно ставишь).
Как вызвать функцию с параметрами из сторонней 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 то ты все равно ставишь).