通过引用从c#COM Visible类中的c#方法返回vb变量

时间:2013-09-08 19:36:46

标签: c# .net com variant ref

我对COM接口没有太多经验,我不得不创建一个COM Visible类,其中包含一个方法DoStuff,它将通过引用返回两个VB Variant变量,它们实际上是一个vb long和vb字符串但声明为变体

目前我有类似的东西:

public void DoStuff(string someString, int someInt, ref long refLong, ref string refString)
{
    refLong = DesiredReturnLong;
    refString = DesiredReturnString;
}

我遇到问题,因为调用COM接口的脚本需要返回VB变量。

我怎么能这样做?我不认为我可以只返回这样的对象(我最初的想法是VB类型的变种被改为VB.net中的对象

 public void DoStuff(string someString, int someInt, ref object refLong, ref object refString)
{
    ...
}

方法签名应该是什么样的,我需要做些什么才能返回正确的值?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

随意尝试:执行RegAsm.exe /tlb生成.TLB文件,然后使用OleView.exe进行查看。对于像你这样的方法签名:

public void DoStuff(string someString, int someInt, 
    ref object refLong, ref object refString) 

你应该看到相应的接口方法:

HRESULT DoStuff([in] BSTR someString, [in] long someInt, 
    [in, out] VARIANT* refLong [in, out] VARIANT* refString)

答案 1 :(得分:2)

VB变体作为对象返回,然后被转换为所需的类型。从com使用VB 6类型时有一个警告,我被长时间捕获,vb6 long是一个。 net int!因此,尽管com对象的签名很长,但它实际上是32位有符号整数值