2

我对 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 Variants。

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

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

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

谢谢你的帮助

4

2 回答 2

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)
于 2013-09-09T04:23:09.443 回答
2

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

于 2014-02-11T06:30:01.823 回答