我对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)
{
...
}
方法签名应该是什么样的,我需要做些什么才能返回正确的值?
感谢您的帮助
答案 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位有符号整数值