2011-12-28 7 views
5

He estado tratando de desarrollar una biblioteca C++/CLI para usar en C# y tengo el siguiente problema. Si tomamos mi clase de referencia conseguido ser de la siguiente manera:Mi propio tipo administrado como arg en la biblioteca de clases C++/CLI: CS0570: no es compatible con el idioma

namespace Library 
{ 
using namespace System; 

public ref class Test 
{ 
internal: 
    String^ internalString; 
public: 
    Test() 
    { 
     internalString = gcnew String("Hey There"); 
    } 
    ~Test() 
    { 

    } 
}; 

public ref class TestImplement 
{ 
public: 
    static String^ TestMessage(Test test) 
    { 
     return test.internalString; 
    } 
}; 
} 

Y mi C# aplicación de la siguiente manera:

using System;

namespace AddProgram 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Library.Test test = new Library.Test(); 
     Console.WriteLine(Library.TestImplement.TestMessage(test)); 
     Console.Read(); 
    } 
} 
} 

me sale el siguiente error:

CS0570 error: 'TestMessage' no está soportado por el lenguaje

Por lo que yo puedo decir que esto es debido al paso del tipo Library.Test como un argumento. No entiendo por qué estoy recibiendo este mensaje, y espero que sea posible pasar tipos de mi biblioteca de referencia.

Cualquier ayuda se agradece

+0

Cuide sus sombreros y destructores en C++/CLI. –

Respuesta

13

Es necesario declarar TestMessage tomando como referenciaa un Library.Test, lo que significa usar el símbolo de intercalación (^) como lo hizo para la cadena ^. C++/CLI le permite manejar tipos de referencia usando la semántica del tipo de valor (tipo de) dejando el cursor, pero C# no tiene una función equivalente, razón por la cual está obteniendo ese error.

+0

Tuve el mismo problema porque la firma de mi método era 'MyMethod (System :: Collections :: Generic :: List myArgs)', es decir, olvidé hacer de la Lista una referencia, así como el argumento genérico . – Steztric

Cuestiones relacionadas