2010-06-03 31 views
11

hola quiero agregar algunos archivos .h y .cpp en C# para obtener la funcionalidad C++ en C# quiero usar el código directamente sin hacer ningún archivo dll.¿puedo agregar archivos .h y .cpp en un proyecto de C#?

puedo hacerlo si es así, ¿cómo puedo hacer esto?

Gracias de antemano

+4

¿Por qué alguien menospreció esa pregunta? es una pregunta legítima para alguien que comienza a desarrollar con .NET y desea usar sus bibliotecas C++ –

Respuesta

6

No, no puede. Si la cantidad de código es pequeña, puede escribir una clase C# y pegar partes del código C++ en ella, de modo que esencialmente transporta esa clase a C#. Obviamente, esto no funcionará si está utilizando una función de idioma o función de biblioteca que no está en C#. Alternativamente, debe compilar su código C++ en algo ejecutable (ya sea una DLL nativa, idealmente funciones planas tipo C, o un ensamblado administrado) para que pueda llamarlo desde su código C#.

1

No. No puede.

Tendrá que migrar el código a C# o poner el código de C++ en una DLL y luego llamarlo desde C#.

1

Si ya tiene el código en C++ la mejor opción es usar C++/CLI donde puede incluir archivos .h y .cpp y hacer referencia al dll compilado de su proyecto C#.

4

Aunque es tarde, me gustaría responder a su pregunta ya que he tenido un problema similar.

Puede hacerlo compilando el código C++ en netmodule y agregando el módulo a la línea de comando CSharp.

Cuento corto. Primera forma es la siguiente:

  1. aduana crea el llamado a construir archivo .cpp, como yourfile.cpp cl/clr/MD/LN/enlace/DLL/LTCG/NOASSEMBLY/NOENTRY
  2. Agregar producido netmodule compilación de cs

Esta se describe en detalle en here.

La segunda manera es:

  1. Cree otro proyecto de C++/CLI con su código
  2. Uso ILMerge fusionar ensamblaje proyecto de C++/CLI para su archivo DLL de C# proyecto

Que uno está descubierto here

Esto es ejemplo de instalación de MSBuild para csproj por primera vez:

<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> 
Cuestiones relacionadas