Поинтер из ДЛЛ
Добавлено: 09 июл 2004, 12:31
Итак задача.... Имеецаа ДЛЛ написанная мною, не вдаваясь в подробности скажу, что подхватывать её надо на лету и никак иначе, так что LoadLibrary мне обеспечен. Из своей проги я вызываю методы своей ДЛЛки, и всё прекраснейшим образом работает но.... Стоит мне вызвать метод, который возвращает, или принимает поинтер.. любой поинтер как я получаю:
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.
Ошибку можно игнорить, но после этого начинаецца форменное загаживание стэка, вплоть до того, что дебагер в такие места приходит, что волосы встают дыбом причём не только на голове... Особенно весело когда дебагер прыгает на одну строчку назад.... Как вы понимаете так программа работать не может... Пробовал играться всякими __stdcall __fastcall (WINAPI CALLBACK PASCAL как выяснилось представляют собой __stdcall). Так как мне быть! Прикладываю код вызова метода
float *ff;
ff = NULL;
HMODULE DLL;
typedef void (WINAPI MESS)(float *);
MESS *Prep = NULL;
DLL = AfxLoadLibrary("MedusaDynamic.dll");
if(DLL != NULL)
{
Prep = (MESS *)GetProcAddress(DLL, "GetPointer");
if(Succ = (Prep != NULL))
(Prep)(ff);
На последней строчке и выскакивает ошибка....
Сам метод GetPointer объявлена так...
void WINAPI GetPointer(float *);
И реализована так:
void CMedusaDynamicApp::GetPointer(float *out)
{
out = ((CMedusaDynamicApp *)AfxGetApp())->InternalGetPointer();
}
Метод InternalGetPointer возвращает указатель на float который по любому существует, находится в области видимости и память выделена.... Что мне делать?
:?:
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.
Ошибку можно игнорить, но после этого начинаецца форменное загаживание стэка, вплоть до того, что дебагер в такие места приходит, что волосы встают дыбом причём не только на голове... Особенно весело когда дебагер прыгает на одну строчку назад.... Как вы понимаете так программа работать не может... Пробовал играться всякими __stdcall __fastcall (WINAPI CALLBACK PASCAL как выяснилось представляют собой __stdcall). Так как мне быть! Прикладываю код вызова метода
float *ff;
ff = NULL;
HMODULE DLL;
typedef void (WINAPI MESS)(float *);
MESS *Prep = NULL;
DLL = AfxLoadLibrary("MedusaDynamic.dll");
if(DLL != NULL)
{
Prep = (MESS *)GetProcAddress(DLL, "GetPointer");
if(Succ = (Prep != NULL))
(Prep)(ff);
На последней строчке и выскакивает ошибка....
Сам метод GetPointer объявлена так...
void WINAPI GetPointer(float *);
И реализована так:
void CMedusaDynamicApp::GetPointer(float *out)
{
out = ((CMedusaDynamicApp *)AfxGetApp())->InternalGetPointer();
}
Метод InternalGetPointer возвращает указатель на float который по любому существует, находится в области видимости и память выделена.... Что мне делать?
:?: