Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Неверный вызов функции


Автор: Dark Elf 18.10.2005, 12:21
Добрый день!

Вызываю функцию из DLL следующим образом:

Код

    HMODULE lib = LoadLibraryEx("analys32.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
    if (!lib) return 0;
    typedef char* (*f)(char*, char*);
    f fn;
    fn = (f)GetProcAddress(lib,"gcd");
    char *v = fn("1","2");


Вылетает и выдаёт следующее:

Цитата
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.


Как от этого избавиться?

Заранее благодарен за ответ.

З.Ы. Что-то раньше такиз проблем не возникало...

З.З.Ы. Использую Visual Studio 2003

Автор: SergeCpp 18.10.2005, 12:27
Ответ, кстати — в Вашей цитате...
Добавлено @ 12:29
calling convention различаются

Ну и, на всякий случай, проверьте соответствие прототипа действительному состоянию дел

Автор: Dark Elf 18.10.2005, 13:47
Цитата(SergeCpp @ 18.10.2005, 12:27)
Ответ, кстати — в Вашей цитате...
Добавлено @ 12:29
calling convention различаются


Я вижу что оно пишет, интересует как изменять typedef или что-то ещё чтобы вызывать функцию по другим calling conventions

Автор: Mad 18.10.2005, 13:49
Цитата(Dark @ 18.10.2005, 11:21)
e calling convention with a function pointer declared with a different calling convention.

при компиляции самой dll в обьявление функции gcd надо добавить __stdcall
егоже в typedef

Автор: Dark Elf 18.10.2005, 14:02
Цитата(Mad @ 18.10.2005, 13:49)
при компиляции самой dll


dll не моя а открученная от Excel

Код

typedef char* (__stdcall *f)(char*, char*);


Спасибо за помощь, но так тоже не помогло... а есть ли какие-то ещё способы?

Автор: Neitron 18.10.2005, 14:19
__fastcall

Автор: Earnest 21.10.2005, 18:24
А ты проверял, не ноль ли тебе возвращает GetProcAddress?

Автор: Dark Elf 21.10.2005, 18:41
Неа не 0 возвращает... впрочем я уже самостоятельно реализовал нужную мне функцию smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)