Вызов функции DLL


Как только Вы получите адрес целевой функции динамически подключаемой библиотеки (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.

 

Назад в оглавление
На главную страницу темы
Перевод 25.10.2007 14:10 ©Copyright V. Sokovikov
Hosted by uCoz