LoadLibrary and run-time linking
создаю указатель на функцию, допустим MessageBoxA
и переменную модуля,загружаю dll содержащую эту функцию, определяю адрес функции, вызываю функцию и освобождаю dll. Проблема: при вызове функции таким способом программа вылетает. Как я понял проблеммы со стеком после того как функция отработает и программа передаст управление системе (ret 10). MessageBoxA взял для примера на самом деле вызываю диалог открытия файла - ordinal 63 from shell32.dll. Самое интересное, что в VB туже функцию вызываю через Declare... и все работает ok. И такие проблемы только с системными библиотеками(догадываюсь, что может быть как-то это связано с TLS). Ну вообщем помогите идиоту, please.
Greate thanks in advance.
---=== code sample ===---
int ( *msgbox)(HWND,LPCTSTR,LPCSTR,UINT);
HINSTANCE hMdl;
hMdl=LoadLibrary("user32.dll");
msgbox=(int (*)(HWND,LPCTSTR,LPCTSTR,UINT)) GetProcAddress(hMdl,(const char*)429);
msgbox(hwnd,"yes","oo",MB_OK);
FreeLibrary(hMdl);
On 2001-07-27 2056, Anonymous wrote
Последовательность действий
создаю указатель на функцию, допустим MessageBoxA
и переменную модуля,загружаю dll содержащую эту функцию, определяю адрес функции, вызываю функцию и освобождаю dll. Проблема при вызове функции таким способом программа вылетает. Как я понял проблеммы со стеком после того как функция отработает и программа передаст управление системе (ret 10). MessageBoxA взял для примера на самом деле вызываю диалог открытия файла - ordinal 63 from shell32.dll. Самое интересное, что в VB туже функцию вызываю через Declare... и все работает ok. И такие проблемы только с системными библиотеками(догадываюсь, что может быть как-то это связано с TLS). Ну вообщем помогите идиоту, please.
Greate thanks in advance.
---=== code sample ===---
int ( *msgbox)(HWND,LPCTSTR,LPCSTR,UINT);
HINSTANCE hMdl;
hMdl=LoadLibrary("user32.dll");
msgbox=(int (*)(HWND,LPCTSTR,LPCTSTR,UINT)) GetProcAddress(hMdl,(const char*)429);
msgbox(hwnd,"yes","oo",MB_OK);
FreeLibrary(hMdl);
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Hi !!
Думаю AfxMessageBox(...); проще
http//www.development.efficientit.com
On 2001-07-27 20:56, Anonymous wrote:
Последовательность действий:
создаю указатель на функцию, допустим MessageBoxA
и переменную модуля,загружаю dll содержащую эту функцию, определяю адрес функции, вызываю функцию и освобождаю dll. Проблема: при вызове функции таким способом программа вылетает. Как я понял проблеммы со стеком после того как функция отработает и программа передаст управление системе (ret 10). MessageBoxA взял для примера на самом деле вызываю диалог открытия файла - ordinal 63 from shell32.dll. Самое интересное, что в VB туже функцию вызываю через Declare... и все работает ok. И такие проблемы только с системными библиотеками(догадываюсь, что может быть как-то это связано с TLS). Ну вообщем помогите идиоту, please.
Greate thanks in advance.
---=== code sample ===---
int ( *msgbox)(HWND,LPCTSTR,LPCSTR,UINT);
HINSTANCE hMdl;
hMdl=LoadLibrary("user32.dll");
msgbox=(int (*)(HWND,LPCTSTR,LPCTSTR,UINT)) GetProcAddress(hMdl,(const char*)429);
msgbox(hwnd,"yes","oo",MB_OK);
FreeLibrary(hMdl);
--- для Mfc похожая проблема --
Надо так делать:
HANDLE hOld = AfxGetResourceHandle();
AfxSetResouceHandle(AfxGetModuleHandle());
CDialog dlg(IDD_DIALOG1);
dlg.DoModal();
AfxSetResourceHandle(hOld);
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
может помочь...
Кстати, а диалог нормально отрабатывает?
Holly