Вы загружаете DLL32, базирующуюся на Win32, из APP16 при помощи использования функции LoadLibraryEx32W.
// Загружаем DLL базирующуюся на Win32 из 16-разрядного кода.
if( NULL == (ghLib = LoadLibraryEx32W( "dll32.dll", NULL, 0 )) )
{
MessageBox( NULL, "Cannot load DLL32", "App16", MB_OK );
return 0;
}
|
Если Вы изолируете ваш код переключения вызова с 16- битового на 32-битовый модуль и обратно в DLL16, то Вы можете поместить вызов функции LoadLibraryEx32W в функцию LibMain кода DLL16.
Дескриптор экземпляра сохраняется в нижеследующей глобальной переменной:
DWORD ghLib; |
Связывая 16-разрядный код, Вы должны обозначить, что унифицированные функции переключения вызова с 16- на 32-битовый модуль и обратно должны быть импортированы из системного ядра. Например, используя Microsoft Visual C++, Вы должны создать раздел IMPORTS в файле модуля определения (.DEF) для APP16, следующим образом.
IMPORTS
kernel.LoadLibraryEx32W
kernel.FreeLibrary32W
kernel.GetProcAddress32W
kernel.GetVDMPointer32W
kernel.CallProcEx32W |