Как добавить библиотеку windows forms

Обновлено: 06.07.2024

Добавить необходимые заголовочные файлы в папку Header Files. Например, добавим файл header.h, в котором разместим объявления функций.

Добавить необходимые файлы исходных кодов в папку Source Files. Например, добавим файл source.cpp, в котором разместим реализации.

Содержимое заголовочного файла:

extern "C" __declspec(dllexport) int TestFunction(int w, int h);

Содержимое файла исходных кодов:

int TestFunction(int w, int h)

Создание консольного приложения

Выполнить команду контекстного меню File->New Project

Выбрать тип проекта Visual C++ -> Win32 -> Win32 Console Application

Ввести имя проекта

Нажать на кнопку Create

Нажать на кнопку Next

Выбрать Application Type равным Console Application

Установить Additional Options равными Empty Project

Нажать на кнопку Finish

Статическое подключение библиотеки в консольное приложение

Добавить в проект в папку Resources Files скомпилированный lib-файл библиотеки.

В файле исходного кода, где будет вызываться функция библиотеки необходимо поместить прототип импортируемой функции.

В продолжении примера, это можно сделать следующим образом:

extern "C" __declspec(dllimport) int TestFunction(int w, int h);

int w = 10, h = 10;

int multi = TestFunction(w, h);

Динамическое подключение библиотеки в консольное приложение

Динамическое подключение предполагает, что библиотека подключается в приложение в момент его исполнения. Для этого необходимо использовать функцию библиотеки windows.h - LoadLibrary. Например, это можно реализовать следующим образом:

// тип указателя на функцию, имеющей прототип, который совпадает с прототипом импортируемой из библиотеки функции

typedef int (*TESTFUNCTION)(int, int);

int w = 10, h = 10, multi;

DWORD err;

HINSTANCE hDll = LoadLibrary("dll.dll"); // dll.dll - название подключаемой библиотеки

printf("Library was loaded\n");

// получение указателя на функцию библиотеки

TESTFUNCTION lpTestFunction = (TESTFUNCTION)GetProcAddress(hDll, "TestFunction");

if (lpTestFunction != NULL)

multi = (*lpTestFunction) (w, h);

// освобождение дескриптора

FreeLibrary(hDll);

Подключение библиотеки в Windows Forms приложение

Добавить ссылку на проект библиотеки (References).

Изменить в свойствах оконного приложения опцию компиляции на /clr.

Отключить использование Precompiled Headers.

Прописать пути до заголовочных файлов библиотеки в свойствах проекта. Указать относительные пути, чтобы не было проблем при переносе проекта.

В исходных кодах приложения подключить необходимые заголовочные файлы.

Примечания:

Такая схема экспортирования функций библиотеки удобна в случае C-библиотеки. При наличии классов, содержащих виртуальные методы, возникает проблема линковки, если объявление и реализация разнесены в разных файлах. Решение:

Писать реализацию прямо при объявлении, что наименее предпочтительно.

Создавать библиотеку с поддержкой clr (для этого создаем библиотеку по схеме, описанной выше, и выставляем в свойствах проекта Configuration Properties -> General -> Common Language Runtime Support опцию Common Language Runtime Support(/clr)) (пример библиотеки clrDll в архиве dlltest+WinForms+CRL DLL.7z). При подключении библиотеки в проект необходимо добавить ссылку на проект библиотеки (правой кнопкой мыши по проекту, Add References. Add New Reeference и выбираем проект библиотеки) (пример консольного приложение app4 в dlltest+WinForms+CRL DLL.7z).

Читайте также: