我可以在ac#project中添加.h和.cpp文件吗?

Bad*_*adr 12 c# c++

我想在C#项目中添加一些.h和.cpp文件,以获得C#中的C++功能.我想直接使用代码而不用dll.

我可以这样做吗?怎么样?

Kat*_*ory 8

你不能.如果代码量很小,您可以编写一个C#类并将C++代码片段粘贴到其中,以便您基本上将该类移植到C#中.显然,如果你使用的语言功能或库函数不在C#中,这将不起作用.或者,您需要将C++代码编译为可执行文件(本机DLL,理想情况下是C风格的平面函数或托管程序集),以便您可以从C#代码中调用它.


Ant*_*n K 5

虽然可能会迟到,但我想回答你的问题,因为我遇到了类似的问题.

您可以通过将C++代码编译为netmodule并将模块添加到CSharp命令行来完成此操作.

长话短说.第一种方式如下:

  1. 为.cpp文件创建自定义构建调用,如cl/clr/MD/LN/link/DLL/LTCG/NOASSEMBLY/NOENTRY yourfile.cpp
  2. 将生成的netmodule添加到cs编译中

这里将详细描述这一个.

第二种方式是:

  1. 使用您的代码创建另一个C++/CLI项目
  2. 使用ILMerge将C++/CLI项目程序集合并到C#项目DLL

那是在这里发现的

这是第一种方式的csproj的MSBuild设置示例:

  <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 &quot;C:\Progra~2\Micros~3.0\VC\vcvarsall.bat amd64 &amp; cl $(ClOptions) @(ClCompileFullName) /link $(LinkOptions) &quot;" />
  </Target>
  <Target Name="BeforeBuild">
    <CallTarget Targets="CustomCppBuildStep" />
  </Target>
Run Code Online (Sandbox Code Playgroud)