COM 对象仅适用于 VB.NET,不适用于 C#
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我需要将 [STAThread] 放在 C# 中的 Main() 上。现在可以了。
I needed to put [STAThread] on my Main() in C#. It works now.
您是否在 C# 中尝试过以下操作?
两个版本之间的唯一区别是您使用
var
而不是声明实际类型,从而允许编译器潜在地推断出不正确的类型(不太可能,但肯定有可能);并使用int
而不是Int32
。据我所知,int == Int32,但可能在COM的一些奇怪的极端情况下,它可能不是..?Have you tried the following in C#?
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 ofint
instead ofInt32
. As far as I know, int == Int32, but possibly in some weird corner case of COM, it may not..?