COM 对象仅适用于 VB.NET 而不适用于 C#

本文关键字:适用于 不适用 NET VB 对象 COM | 更新日期: 2023-09-27 17:55:42

我有一个 COM 对象,它在 VB.NET 中工作正常,但在 C# 中不能。这两个项目都是 .NET 4 控制台应用程序。

COM 对象在 C# 中加载,但方法不返回任何值。为什么它会在 VB.NET 而不是 C# 中工作?

谢谢!

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 在 C# 版本中为 0,但在 VB.NET 版本中具有值。

更新:
我需要在 C# 中将 [STAThread] 放在我的 Main() 上。 它现在有效。

COM 对象仅适用于 VB.NET 而不适用于 C#

我需要在 C# 中将 [STAThread] 放在我的 Main() 上。它现在有效。

您是否在 C# 中尝试过以下内容?

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

您的 2 个版本之间的唯一区别是您使用的是 var 而不是声明实际类型,允许编译器潜在地推断出不正确的类型(不太可能,但肯定是可能的);并使用 int 而不是Int32。据我所知,int == Int32,但可能在 COM 的一些奇怪的角落情况下,它可能不是..?