Можно обойтись и без жуткого thunk-compiler, про это написано у Мэта Питтрека
В kernel32.dll для работы с 16-бит DLL есть "недокументированные" ф-ии LoadLibrary16, GetProcAddress16, FreeLibrary16. А вызывать 16-битовую ф-ию надо так:
char thunk_stack[0x40];
_asm
{
mov edx, lpFunc
call QT_Thunk
}
---
где
lpFunc - адрес ф-ии в 16-бит DLL, полученный с помощью GetProcAddress16
QT_Thunk - "недокументированные" ф-я в kernel32.dll
В ф-ии, в кот-й все это делаешь, лучше не создавать локальных переменных,
кроме thunk_stack - QT_Thunk может их разрушить.
|