Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (28.01.2012 в 10:51)
В этом случае ваша DLL-библиотека должна выглядеть следующим образом
#include <Windows.h>

extern "C" __declspec(dllexport) void ShowMessage(LPCTSTR title, LPCTSTR text)
{
  MessageBox(
          NULL,
          text,
          title,
          MB_OK | MB_ICONEXCLAMATION);
}
Тогда программа, загружающая библиотеку dll.dll и вызывающая функцию ShowMessage() может выглядеть следующим образом
// Главный заголовочный файл
#include <Windows.h>
#include <tchar.h>

// Главная входная точка Windows-программ
int WINAPI WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpcmdline,
  int ncmdshow)
{
  // Дескриптор DLL-библиотеки
  HMODULE hDll;
  // Указатель на функцию
  void (*dllShowMessage) (LPCTSTR, LPCTSTR);
  // Загружаем динамически подключаемую библиотеку
  hDll = LoadLibrary(_T("dll.dll"));
  if(!hDll)
  {
    MessageBox(
          NULL,
          _T("Динамическая библиотека не загружена"),
          _T("Ошибка"),
          MB_OK | MB_ICONEXCLAMATION);
    return GetLastError();
  }
  // Настраиваем адрес функции
  dllShowMessage = (void (*)(LPCTSTR, LPCTSTR))GetProcAddress(hDll, "ShowMessage");
  if(!dllShowMessage)
  {
    MessageBox(
          NULL,
          _T("Невозможно получить адрес функции ShowMessage()"),
          _T("Ошибка"),
          MB_OK | MB_ICONEXCLAMATION);
    return GetLastError();
  }
  // Вызываем функцию из библиотеки
  dllShowMessage(_T("Hello world!"), _T("Hello world!"));

  // Отключаем библиотеку
  if(!FreeLibrary(hDll))
  {
    MessageBox(
          NULL,
          _T("Ошибка выгрузки библиотеки из памяти"),
          _T("Ошибка"),
          MB_OK | MB_ICONEXCLAMATION);
    return GetLastError();
  }

  // Выход из программы
  return 0;
}

PS Проверки, конечно, по уму надо бы через исключения делать, а то полезность dllShowMessage() как-то теряется, а сложность возрастает :)))


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: