2010-06-03 66 views
11

你好我想在c#中添加一些.h和.cpp文件来获得c#中的C++功能我想直接使用tha代码来制作任何dll文件。我可以在c#项目中添加.h和.cpp文件吗?

我可以这样做,如果是的话我该如何做到这一点。

thanx

+4

为什么有人downvote该问题?对于开始使用.NET开发并希望使用他的C++库的人来说,这是一个合理的问题 – 2010-06-03 12:26:47

回答

6

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

1

不可以。

您必须将代码迁移到C#或将C++代码合并到DLL中,然后从C#中调用该代码。

1

如果您已经拥有C++代码,最好的选择是使用C++/CLI,您可以在其中包含.h和.cpp文件,并从您的c#项目中引用已编译的dll。

4

即使它可能会晚,我想回答你的问题,因为我有类似的问题。

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

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

  1. 创建自定义的.cpp文件建立呼叫,像CL/CLR/MD/LN /连接/ DLL/LTCG/NOASSEMBLY/NOENTRY yourfile.cpp
  2. 添加生产netmodule以cs汇编

这一个是详细描述here

方式二是:

  1. 创建代码
  2. 使用ILMerge到C++/CLI项目汇编合并到C#项目DLL另一C++/CLI项目

那一个被发现here

这是一个示例为第一种方法的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> 
相关问题