Привет, я хочу добавить некоторые .h и .cpp файлы в С#, чтобы получить функциональность С++ в С#. Я хочу использовать этот код напрямую, не создавая никакого DLL файла.
Могу ли я сделать это, если да, как я могу это сделать.
thanx заранее
Привет, я хочу добавить некоторые .h и .cpp файлы в С#, чтобы получить функциональность С++ в С#. Я хочу использовать этот код напрямую, не создавая никакого DLL файла.
Могу ли я сделать это, если да, как я могу это сделать.
thanx заранее
Нет, вы не можете. Если количество кода невелико, вы можете написать класс С# и вставить в него фрагменты кода С++, чтобы вы по существу перенесли этот класс на С#. Очевидно, что это не сработает, если вы используете функцию языка или библиотечную функцию, которая не находится на С#. В качестве альтернативы вам нужно скомпилировать ваш код на С++ в исполняемый файл (либо встроенную DLL, в идеале плоские функции C-стиля, либо управляемую сборку), чтобы вы могли называть его кодом С#.
Хотя может быть и поздно, я хотел бы ответить на ваш вопрос, поскольку у меня была аналогичная проблема.
Вы можете сделать это, скомпилировав код С++ в netmodule и добавив модуль в командную строку CSharp.
Короче говоря. Первый способ:
Ниже описывается здесь.
Второй способ:
Это раскрыто здесь
Это пример установки MSBuild для csproj для первого пути:
<ItemGroup>
<ClCompile Include="CppFile1.cpp" />
<ClCompile Include="CppFile2.cpp" />
</ItemGroup>
<PropertyGroup>
<NetmoduleName>CppCli.netmodule</NetmoduleName>
<ClOptions>/nologo /clr /LN /I"$(SolutionDir)anotherDir" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_DEBUG" /D "_WINDLL" /D "_MBCS" /Od /Gd /MDd </ClOptions>
<LinkOptions>/LTCG /DLL /NOASSEMBLY /NOENTRY /DEBUG /MACHINE:X64 /SUBSYSTEM:WINDOWS /out:$(OutputPath)$(NetmoduleName) another.lib /LIBPATH:"$(SolutionDir)$(Configuration)" /LIBPATH:"anotherDir"</LinkOptions>
</PropertyGroup>
<Target Name="CustomCppBuildStep" Inputs="@(ClCompile)" Outputs="$(NetmoduleName)">
<ItemGroup>
<ClCompileFullName Include="@(ClCompile->'%(fullpath)', ' ')" />
</ItemGroup>
<Message Importance="high" Text="Compiling cpp: @(ClCompileFullName)" />
<Exec Command="$(ComSpec) /c "C:\Progra~2\Micros~3.0\VC\vcvarsall.bat amd64 & cl $(ClOptions) @(ClCompileFullName) /link $(LinkOptions) "" />
</Target>
<Target Name="BeforeBuild">
<CallTarget Targets="CustomCppBuildStep" />
</Target>
Нет. Вы не можете.
Вам придется либо перенести код на С#, либо соединить код С++ в DLL, а затем вызвать его из С#.
Если у вас уже есть код в С++, лучшим вариантом является использование С++/CLI, где вы можете включать файлы .h и .cpp и ссылаться на скомпилированную dll из вашего проекта С#.