2010-05-20 13 views

Respuesta

4

Para complementar otras respuestas aquí, aquí está el artículo de soporte de MS que describe su situación.

http://support.microsoft.com/kb/828736

+0

+1: Excelente google-fu! Ese enlace es exactamente lo que Matthew necesita. –

+0

@Binary Worrier - Me preocupaba que estuviera pisando los talones con el enlace de arriba, ya que parecía que iba a editar su respuesta. –

+0

Amigo de Kudos, dedos más rápidos ganan :) –

1

Puede hacer que el conjunto C# sea visible para COM, y úselo de esa manera.

En sus propiedades de proyecto C#, debajo del botón "Información de ensamblaje", seleccione "Hacer que COM esté visible".

Existen numerosas formas de acceder a los objetos COM desde Native C++, la manera más fácil/mejor depende de lo que haga y cómo lo haga.

+0

+1 - que más o menos es la misma. La interoperabilidad COM es prácticamente la única forma sensata en este escenario. – TomTom

+1

-1, sin comentarios. . . ¿cómo puede ser esto? Si hay algo mal con mi respuesta, ¿puedes avisarme por favor? Estamos todos aquí para aprender, gracias. –

+0

Gracias por su respuesta, utilizaré este enfoque. :) –

3

No es más que un simple interoperabilidad COM, el MSDN FAQ también enumera los métodos menos conocidos:

2.2 Como llamar ensamblado de .NET de Visual C++ nativo?

Hay básicamente cuatro métodos de ensamblado de .NET llamada de VC++ nativo código. Microsoft All-In-One Code Framework tiene ejemplos de trabajo que demuestran los métodos. Módulo

  1. nativo VC++ llama CLR Hosting APIs para alojar CLR, carga y llamada el ensamblado de .NET. (Todo-En-Uno Marco Código Código de ejemplo: CppHostCLR)

  2. Si el ensamblado de .NET puede ser expuesto como un componente COM, módulo nativo VC++ puede llamar en el conjunto de .NET través de NET - COM interoperacion (Marco Code-En-Uno la Muestra : CppCOMClient)

  3. inversa PInvoke: la gestión nativa llamada codificada pasar un delegado el código nativo puede volver a llamar. (Marco Código de ejemplo Código-En-Uno: CSPInvokeDll)

  4. Si se permite que el módulo que contiene VC código nativo ++ para enable CLR, el VC++ nativo código puede llamar NET directamente a través de los “It simplemente funciona ", O" IJW ", mecanismo. (Todo-En-Uno marco Código Código de ejemplo: CppCLIWrapLib)

3

Bueno, parece que tengo que llevar a mi unmanaged exports nuevo. ;-)

Acabo de responder a similar question Hace 2 días. Esto funciona totalmente en C#, e incluso se crea un archivo .lib .exp & para su montaje # C para ser consumido por C++:

internal class Sample 
{ 
    [DllExport("_export_test", CallingConvention.Cdecl)] 
    static int Test(int a) 
    { 
    return a + 1; 
    } 
} 
+0

¡GUAU! De Verdad? ¿Asumo que el C# necesita ser marcado como inseguro? No tenía idea de frackin que pudieras hacer esto. –

+0

El ensamblaje contendrá bits inseguros, pero no se considerará inseguro cuando se use como ensamblado .Net. Todavía puede usarlo como ensamblaje ordinario x86 o x64 (no AnyCPU) con todas sus clases y esas cosas. Sin embargo, si lo carga como una DLL real, se comportará como tal. Aquí es donde entra el bit inseguro. –

Cuestiones relacionadas