Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 32-2003 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Использование динамического связывания во время выполнения
Вы можете использовать ту же DLL как во время загрузки, так и во время выполнения. Следующий исходный текст производит тот же вывод, что и пример времени загрузки в предыдущей статье. Приложение использует функцию LoadLibrary чтобы получить дескриптор MYPUTS.DLL. Если LoadLibrary выполняется без ошибок, приложение использует возвращенный дескриптор в функции GetProcAddress  чтобы получить адрес функции myPuts. После вызова функции DLL, программа вызывает функцию FreeLibrary, чтобы выгрузить DLL.
Следующий пример иллюстрирует важное различие между динамическим связыванием во время загрузки и времени выполнения. Если файл MYPUTS.DLL - не доступен, приложение, использующее динамическое связывание во время загрузки просто завершается.
Однако пример динамического связывания во время выполнения может ответить на ошибку.
(MSDN: Using Run-Time Dynamic Linking)


// File: RUNTIME.C // Простая программа использующая LoadLibrary и // GetProcAddress для доступа к myPuts в MYPUTS.DLL.
#include <stdio.h> #include <windows.h> typedef VOID (*MYPROC)(LPTSTR); VOID main(VOID) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Получаем дескриптор модуля DLL. hinstLib = LoadLibrary("myputs"); // Если дескриптор имеет силу, пытаемся получить адрес функции. if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // Если адрес функции имеет силу, вызываем эту функцию. if (fRunTimeLinkSuccess = (ProcAdd != NULL)) (ProcAdd) ("message via DLL function\n"); // Выгружаем модуль DLL. fFreeResult = FreeLibrary(hinstLib); } // Если не удалось вызвать функцию DLL, используем альтернативный вариант. if (! fRunTimeLinkSuccess) printf("сообщение, используя альтернативный метод\n"); }
Поскольку программа использует динамическое связывание во время выполнения, Вы не должны линковать библиотеку импорта при создании модуля программы.

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное