Экспорт неуправляемых классов из библиотеки DLL Visual C ++? - PullRequest
3 голосов
/ 30 июля 2009

При создании DLL с помощью Visual C ++ 2008 у меня есть несколько вариантов. Я могу создать «Библиотеку классов» , которая, как я понимаю, на самом деле даст мне .Net Library, которая использует CLI (управляемое) расширение C ++.

Так как я не хочу этого, и я предположил, что мне нужен статический файл .LIB для ссылки на другой исполняемый проект Windows C ++, я выбираю вместо этого «Проект Win32» и на панели «Настройки приложения» задаю C ++ (без MFC) DLL.

Это создаст проект с файлом .cpp, который должен быть там, где я определяю «экспортированные функции для приложения DLL» .

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

Какой обычный способ сделать это?

Ответы [ 4 ]

4 голосов
/ 30 июля 2009

Вы делаете это правильно.Вам нужно пометить свои классы __ declspec (dllexport) , чтобы сделать их доступными вне проекта.Когда вы строите проект, вы сгенерируете .DLL и .LIB.

1 голос
/ 30 июля 2009

Я думаю, что эта статья описывает, что вы пытаетесь сделать: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

Лично я также предпочитаю экспортировать функции C (в отличие от C ++), где я делаю этот указатель явным, чтобы избежать необходимости заботиться об украшении имени метода, специфичного для компилятора, и выставлять сгенерированные компилятором функции.

1 голос
/ 30 июля 2009

Вы правы сделать C ++ (без MFC) DLL. Вы можете создать свои классы и те точки входа, которые вы определили, будут экспортированы из этой DLL для использования другим кодом C ++ (например, приложением Win32, написанным на C ++).

Поскольку имена C ++ автоматически искажаются компилятором в странные и замечательные значения, экспортировать их непрактично, как если бы клиенты DLL, например, были C-программами. Но если все в C ++, вы должны быть в порядке.

Если вы создаете несколько классов, вы можете выбрать их динамическое связывание (в виде DLL), но вам потребуется библиотека импорта (созданная для вас автоматически), которая содержит определения символов DLL. Вы также можете выбрать статическую ссылку на свой код из приложения - в этом случае вы получите статическую библиотеку (также .LIB), которая содержит фактический объектный код в ваших классах, а не символы в DLL.

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

1 голос
/ 30 июля 2009
  • Создать новый проект
  • Visual C ++: Win32: проект Win32
  • В настройках приложения выберите DLL и установите флажок «Экспортировать символы»

Когда вы создаете проект, он заглушает экспортированный класс для вас, обычно с именем C {MyLib}.

...