Здравствуйте, уважаемые господа. На днях столкнулся с проблемой, суть следующая:
Имеется dll и заголовочный файл к ней. В заголовочном файле все функции объявлены так:
#define CALLCONV __stdcall
….
extern “C” RETURN_TYPE CALLCONV Fnc_Name(Parameters);
Подключая библиотеку статически, я менял CALLCONV на __declspec(dllimport) и на этапе выполнения проги в момент обращения к функциям получал ошибку:
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.
Подключая динамически, делал так (меняя CALLCONV обратно на __stdcall):
#typedef void (__stdcall PFN_FncName*)(parameters)
…
HINSTANCE handle = ::LoadLibrary((LPCSTR)("mydll.dll"));
PFN_FncName pfn_FncName = (PFN_FncName) ::GetProcAddress(handle, "FncName");
…
pfn_FncName(Parameters);
В результате получал ту же самую ошибку. Как при статическом, так и при динамическом подключении вылетали не все функции. Некоторые выполнялись успешно.
Подскажите пож., в чем может быть дело? Заранее спасибо!
02.12.10 18:27: Перенесено модератором из 'C/C++' — Odi$$ey