Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在c#项目中添加.h和.cpp文件吗?_C#_C++ - Fatal编程技术网

我可以在c#项目中添加.h和.cpp文件吗?

我可以在c#项目中添加.h和.cpp文件吗?,c#,c++,C#,C++,我想在C语言项目中添加一些.h和.cp文件,以获得C++中的C++功能。我想直接使用代码而不制作dll 我可以这样做吗?怎么做?不,你不能。如果代码量很小,可以编写C类,并将C++代码粘贴到其中,这样就可以将该类基本移植到C语言中。显然,如果您使用的语言功能或库函数不在C#中,这将不起作用。或者,你需要编译C++代码到可执行的(本地的DLL,理想的C型扁平函数,或者托管程序集),这样你就可以从C代码中调用它。< /P> < P >不,你不能。 你要么要么把代码迁移到C++,要么把C++代码分解成

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


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

不,你不能。如果代码量很小,可以编写C类,并将C++代码粘贴到其中,这样就可以将该类基本移植到C语言中。显然,如果您使用的语言功能或库函数不在C#中,这将不起作用。或者,你需要编译C++代码到可执行的(本地的DLL,理想的C型扁平函数,或者托管程序集),这样你就可以从C代码中调用它。< /P> < P >不,你不能。


你要么要么把代码迁移到C++,要么把C++代码分解成一个DLL,然后调用C++,如果你已经有C++代码,最好的选择是使用C++ +CLI,其中可以包含.h和.cp文件,并引用你的C项目中的编译的DLL。< /P> < P>。问题,因为我也遇到过类似的问题

可以通过编译NC++模块的C++代码并将该模块添加到CSARP命令行。 长话短说第一种方式如下所示:

  • 为.cpp文件创建自定义生成调用,如cl/clr/MD/LN/link/DLL/LTCG/NOASSEMBLY/NOENTRY yourfile.cpp
  • 将生成的netmodule添加到cs编译中
  • 详细描述了这一点

    第二种方式是:

  • 使用代码创建另一个C++/CLI项目
  • 用于将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>
    
    
    CppCli.netmodule
    /nologo/clr/LN/I“$(SolutionDir)另一个dir”/D“WIN32”/D“\u WINDOWS”/D“\u USRDLL”/D“\u DEBUG”/D“\u windl”/D“\u MBCS”/Od/Gd/MDd
    /LTCG/DLL/NOASSEMBLY/NOENTRY/DEBUG/MACHINE:X64/SUBSYSTEM:WINDOWS/out:$(OutputPath)$(NetmoduleName)other.lib/LIBPATH:$(SolutionDir)$(Configuration)//LIBPATH:$(anotherDir)
    
    为什么会有人否决这个问题?这是一个合法的问题,有人开始使用.NET开发,并希望使用他的C++库。