|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 5, 2003 12:44:15 Есть некая DLL, есть к ней .inc и .lib файлы, так что можно использовать invoke. Все работает хорошо, пока эта DLL находится в одной из стандартных папок. Но когда расположение DLL определяется только в runtime, то приходится использовать LoadLibrary+GetProcAddress, которые дают указатель на процедуру, который можно передать оператору CALL. Вопрос в следующем: как использовать invoke, чтобы он вызывал процедуру не по сведениям из .lib-файла, а использовал полученный указатель-на-процедуру? Исходные данные такие: ;одна из функций из .inc SomeFunctionZZZ PROTO :DWORD,:DWORD ;код программы (синтаксис упрощен для краткости) hMod = LoadLibrary("DllPathAndName") ProcAddr = GetProcAddress(hMod, "SomeFunctionZZZ") ;как построить invoke, чтобы он использовал именно полученный ProcAddr ? HELP! |
|
|
Дата: Сен 5, 2003 12:53:39 Это не Invoke строить нужно, а PROTO или EXTERNDEF объявление. В принципе можно указать, что ты публикуешь не имя а указатель... Но вот как это сделать с регистром eax.. я не знаю. |
|
|
Дата: Сен 5, 2003 12:58:14 Насколько я знаю - никак. Но можно самому макрос написать. |
|
|
Дата: Сен 5, 2003 13:29:37.386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib proto04 typedef proto :DWORD, :DWORD, :DWORD, :DWORD pproto04 typedef ptr proto04 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .const szUser32 db "user32.dll", 0 szMessageBox db "MessageBoxA", 0 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .data? g_hinstanceUser32 HINSTANCE ? g_pfnMessageBox pproto04 ? ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code start: invoke LoadLibrary, offset szUser32 mov g_hinstanceUser32, eax invoke GetProcAddress, eax, offset szMessageBox mov g_pfnMessageBox, eax invoke [g_pfnMessageBox], NULL, NULL, NULL, MB_OK invoke FreeLibrary, g_hinstanceUser32 invoke ExitProcess, 0 end start |
|
|
Дата: Сен 5, 2003 13:42:22 · Поправил: Edmond Four-F Браво, а invoke [eax], NULL, NULL, NULL, MB_OK Пройдёт? |
|
|
Дата: Сен 5, 2003 13:57:10 Пройдет, если написать перед вызовом assume eax:proto04 invoke eax, 0,0,0,0 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080 |