Как создавать и использовать DLL-файлы в C # - PullRequest
3 голосов
/ 05 апреля 2011

В настоящее время я пытаюсь научиться писать и использовать файлы .dll для Windows на C # и C ++. Я думаю, что когда я пойму один из этих языков, я смогу легко понять другой. Я искал более 5 часов сегодня, но не смог найти работающее руководство .dll. Они либо устарели и отказываются работать с моим компилятором, либо просто являются мусором. Кто-нибудь знает хорошее руководство, которое работает ? Я использую Dev C ++ и VC ++ 2010. Спасибо за помощь! :)

Ответы [ 3 ]

5 голосов
/ 06 апреля 2011

DLL в C # и C ++ несколько отличаются, особенно в том, как они используются.C # использует сборки, в которые упакованы всевозможные метаданные, и скрывает большинство деталей.C ++ этого не делает, вы должны сообщить ему, что и как экспортируется.

Создание DLL обычно состоит из написания кода, затем для каждого класса или функции, которые вы хотите использовать (вне DLL), добавьте этот бит:

int __declspec(dllexport) function(int param);
class __declspec(dllexport) object;

Это «экспортирует» символы, делая их видимыми извне DLL.Это нужно делать только для тех, которые будут использоваться внешне, и для классов, только для класса (не для каждого метода).

При использовании DLL вы захотите включить заголовок со всемифункции, но с __declspec(dllimport) примечаниями.Это скажет вашему коду, что они используются из внешней DLL.Вам необходимо предоставить компоновщик lib (созданный при компиляции DLL) в качестве входного файла, и все должно выстроиться в линию.

Простой способ справиться с этим:

#ifndef IMPORT_MYLIB
#    define MYLIB_API __declspec(dllexport)
#else
#    define MYLIB_API __declspec(dllimport)
#endif

int MYLIB_API function();

При использовании DLL в другом приложении просто #define IMPORT_MYLIB и заголовок будет настроен соответствующим образом.

Для C # вам нужно просто создать библиотеку с открытыми классами, а затем добавить ее в качестве ссылки надругой проект.Затем вы можете использовать классы из него, и эти два файла будут автоматически связаны друг с другом (гораздо проще, но не всегда так же чисто, как метод C ++).

Обратите внимание, что библиотеки DLL являются специфическими для Microsoft, и их довольно много.маленькие детали, которые могут вас заинтересовать позже (как искать импорт и так далее).

2 голосов
/ 06 апреля 2011

DLL в C # очень просты.

  1. Создайте новый проект, который собирается в dll.
  2. Добавьте ссылку на новый проект dll в существующий проект.
  3. Используйте классы, помеченные как public в вашей dll, как если бы они были частью вашего исходного проекта.

Peachykeen предлагает самый простой способ экспорта классов и функций из C ++ DLL.Существует более продвинутая техника, которую я бы предложил.Вместо того, чтобы экспортировать каждый необходимый вам класс, выведите все свои классы в dll из интерфейсов (класс с хотя бы одним чисто виртуальным методом).Затем экспортируйте фабричную функцию (и), которая возвращает указатели на эти интерфейсы.Это уменьшает связь между вашим основным исполняемым файлом и библиотекой DLL, поскольку вам нужно только совместно использовать интерфейсы, а не какие-либо подробности реализации.

В проекте кода есть хорошая статья по этой технике.

http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx

Одним из приятных преимуществ вышеуказанного подхода является то, что он значительно сокращает время компиляции.Вы можете полностью переопределить библиотеку DLL без необходимости перекомпиляции основного приложения.

0 голосов
/ 05 апреля 2011

В visual studio их теперь называют «сборками», а не DLL. Изменение терминологии сбивает с толку. Создание DLL состоит из простого создания проекта правильного типа и добавления вашего кода. Однако использование DLL из другого языка или компилятора может быть сложным.

Вы пробовали этот учебник?

...