Создать MS Visual C ++ DLL проект из существующих источников - PullRequest
0 голосов
/ 03 сентября 2018

Моя цель - собрать существующие классы C ++ (унаследованный код, хранящийся в наборе *.h файлов) в DLL, чтобы в дальнейшем ее можно было интегрировать в приложение C #.

Для этой цели лучше всего использовать MS Visual Studio. У меня нет опыта работы с этой средой, поэтому я попробовал наивный подход, найденный в MSDN и других ответах SO:

  • Файл | Новый | Проект из существующего кода
  • выбран Visual C ++
  • выбранное местоположение файла, которое является базой для включаемых ссылок, используемых в этих .h файлах
  • указано название проекта
  • пусть мастер найдет и добавит все файлы C ++ ниже каталога
  • выбрано «Использовать Visual Studio» для сборки с типом проекта «Динамически связанная библиотека (DLL)»
  • не установил ни один из флажков ниже (ATL, MFC, CLR)
  • указано . dir в «Включить пути поиска (/ I)» в настройках отладки
  • установлен флажок «То же, что конфигурация отладки» в «Настройках выпуска»
  • нажал кнопку Готово

Это создает пару файлов VS в каталоге:

mylibrary.sln
mylibrary.vcxproj
mylibrary.vcxproj.filters
mylibrary.vcxproj.user

Когда проект создан таким образом, я нажимаю F6 или выбираю Build | Rebuild solution из меню.

Тогда я ожидаю, что сборка где-нибудь выдаст файл .dll, но он не появляется. Появляются только эти файлы:

.vs/mylibrary/v15/.suo
.vs/mylibrary/v15/Browse.VC.db
.vs/mylibrary/v15/Browse.VC.opendb
.vs/mylibrary/v15/ipch/AutoPCH/efad7c74cd39331b/EXAMPLE.ipch
Debug/mylibrary.log
Debug/mylibrary.tlog/mylibrary.lastbuildstate

Затем я решил попробовать создать новый проект библиотеки, просто чтобы увидеть различия, чтобы получить некоторые подсказки, но это не помогло - было слишком много различий, даже в файловой структуре ...

Мои вопросы:

  • мой выбор MS Visual C ++ подходит для данной цели?
  • если так, что я тут не так делаю?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Компиляция .h файлов в библиотеки - это нормально, компилятору все равно - однако, интерфейс делает. Тем не менее, вы можете настроить это, отредактировав файл .vcxproj.

При этом убедитесь, что разделы <ClCompile> содержат:

  <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

Обратите внимание, что вы можете использовать командную строку для построения проекта DLL:

"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" -target:Clean,Build

(предполагается, что ваш текущий каталог - это каталог с .vcxproj)

0 голосов
/ 06 сентября 2018

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

Вы пропустили только экспорт методов, которые вы хотите использовать из вашей библиотеки. попробуйте использовать __declspec (dllexport) с этими методами. пожалуйста, проверьте эту ссылку:

https://msdn.microsoft.com/en-us/library/a90k134d.aspx.

Кроме того, вывод должен быть в папке сборки, а не в папке с исходным кодом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...