Как только Вы получите адрес целевой функции динамически подключаемой библиотеки (DLL), то можете вызвать ее из APP16, используя функцию CallProcEx32W.
Эти примеры вызывают MyPrint, пересылая два параметра, строку и дескриптор окна. Все параметры должны быть 32-разрядными значениями. Поэтому, строка объявляется, используя указатель FAR, как показано здесь:
char FAR *TestString = "Hello there"; |
Вы должны преобразовать 16-разрядный дескриптор окна в 32-разрядный, используя функцию WOWHandle32, как показано здесь:
// Преобразуем дескриптор окна. DWORD hWnd32; hWnd32 = WOWHandle32(hWnd, WOW_TYPE_HWND); |
Нижеследующий пример использует CallProcEx32W.
// Вызываем процедуру MyPrint из DLL базирующейся на Win32. CallProcEx32W( 2 | CPEX_DEST_STDCALL, 2, hProc, (DWORD) TestString, hWnd32); |
Маска 2 (0x10) дается, потому, что мы хотим передать TestString при помощи ссылки, а hProc при помощи значения. Система преобразует указатель для нас.
Если Вы изолируете ваш код переключения вызова с 16- на 32-битовый модуль и обратно в DLL16, поместите вызов функции CallProcEx32W в функцию MyPrint кода DLL16.