El objeto COM solo funciona en VB.NET, no en C #

Tengo un objeto COM que funciona bien en VB.NET, pero no en C #. Ambos proyectos son aplicaciones de consola .NET 4.

El objeto COM se carga en C #, pero los métodos no devuelven ningún valor. ¿Por qué funcionaría en VB.NET y no en C #?

¡Gracias!

Sub Main()
    Dim server As New NoahVersionLib.Version

    Dim val As Int32

    server.GetNoahServerVersionMS(val)



End Sub


    static void Main(string[] args)
    {
        var server = new NoahVersionLib.Version();

        int val= 0;

        server.GetNoahServerVersionMS(ref val);
    }

val es 0 en la compilación de C #, pero tiene un valor en la compilación de VB.NET.

ACTUALIZACIÓN:
Necesitaba poner [STAThread] en mi Main () en C #. Ahora funciona.

preguntado el 10 de mayo de 11 a las 13:05

¿Código? ¿O estamos adivinando ...? -

muestre una muestra de código mínima pero funcional (es decir, compilando) que ilustre el problema en ambos entornos. tinyurl.com/so-hints -

No hay ninguna razón especial por la que solo funcione en VB.NET y no en C #. Se compilan en el mismo código. La única forma en que podemos responder a esta pregunta es si nos proporciona una muestra mínima que reproduzca el comportamiento. Lo más probable es que haya un error en la forma en que está convirtiendo el código VB.NET en C #. -

Eche un vistazo a ambos archivos exe en ildasm. ¿Ves alguna diferencia en el código IL generado? ¿Y si si, que? -

Además, hace una diferencia en la compilación de C # si se usa var en lugar de NoadVersionLib.Version. -

2 Respuestas

Necesitaba poner [STAThread] en mi Main () en C #. Ahora funciona.

contestado el 11 de mayo de 11 a las 17:05

¿Ha probado lo siguiente en C #?

static void Main(string[] args)    
{        
    NoahVersionLib.Version server = new NoahVersionLib.Version();        
    Int32 val= 0;        
    server.GetNoahServerVersionMS(ref val);    
}

Las únicas diferencias entre sus 2 versiones son que está utilizando var en lugar de declarar el tipo real, permitiendo al compilador inferir potencialmente un tipo incorrecto (improbable, pero seguramente posible); y uso de int en lugar de Int32. Hasta donde yo sé, int == Int32, pero posiblemente en algún extraño caso de COM, puede que no ...?

contestado el 10 de mayo de 11 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.