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

发布于 2024-11-06 18:17:33 字数 575 浏览 4 评论 0原文

我有一个 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 构建中具有值。

更新:
我需要将 [STAThread] 放在 C# 中的 Main() 上。现在可以了。

I have a COM object that works fine in VB.NET, but not in C#. Both projects are .NET 4 console applications.

The COM object loads in C#, but the methods don't return any values. Why would it work in VB.NET and not C#?

Thanks!

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 is 0 in the C# build, but has a value in the VB.NET build.

UPDATE:
I needed to put [STAThread] on my Main() in C#. It works now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Smile简单爱 2024-11-13 18:17:34

我需要将 [STAThread] 放在 C# 中的 Main() 上。现在可以了。

I needed to put [STAThread] on my Main() in C#. It works now.

楠木可依 2024-11-13 18:17:34

您是否在 C# 中尝试过以下操作?

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

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

Have you tried the following in C#?

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

The only differences between your 2 versions are that you are using var instead of declaring the actual type, allowing the compiler to potentially infer an incorrect type (unlikely, but surely possible); and use of int instead of Int32. As far as I know, int == Int32, but possibly in some weird corner case of COM, it may not..?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文