Вы загружаете 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 |