【发布时间】:2011-08-22 12:07:50
【问题描述】:
我有一个在 VB.NET 中可以正常工作的 COM 对象,但在 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() 上。现在可以了。
【问题讨论】:
-
代码?还是我们在猜测..?
-
请展示一个最小但工作(即编译)的代码示例,说明两个环境中的问题。 tinyurl.com/so-hints
-
它只能在 VB.NET 而不是 C# 中工作,没有什么特别的原因。它们编译成相同的代码。我们可以回答这个问题的唯一方法是,如果您向我们提供重现行为的最小样本。很有可能,您将 VB.NET 代码转换为 C# 的方式存在错误。
-
查看
ildasm中的两个exe 文件。你看到生成的 IL 代码有什么不同吗?如果是,是什么? -
另外,如果使用 var 而不是 NoadVersionLib.Version,它会在 C# 构建中产生差异。
标签: c# .net vb.net com interop