Mimo że może być późno, chciałbym odpowiedzieć na twoje pytanie, ponieważ miałem podobny problem.
Możesz to zrobić poprzez skompilowanie kodu C++ do modułu sieciowego i dodanie modułu do linii poleceń CSharp.
Krótka historia. Pierwszy sposób jest następujący:
- tworzyć niestandardowe budować połączenia do pliku .cpp, jak cl/clr/MD/LN/link/DLL/LTCG/NOASSEMBLY włączoną opcją/NOENTRY yourfile.cpp
- dodawania produkowane netmodule do kompilacji cs
Ten szczegółowo opisano szczegółowo w pozycji here.
Drugi sposób jest:
- Tworzenie kolejny projekt C++/CLI z kodem
- Korzystanie ILMerge do scalenia C++/CLI złożenia projektu do C DLL # projektu
że jeden jest odkryte: here
To jest przykład konfiguracji MSBuild dla csproj na pierwszy sposób:
<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>
Dlaczego ktoś zgodziłby się na to pytanie? jest to uzasadnione pytanie dla kogoś, kto zaczyna rozwijać się z .NET i chce używać swoich bibliotek C++ –