2010-07-28 37 views
3

我有一个类库暴露于COM是这样的:的ParamArray不工作与COM

<ComClass(SomeClass.ClassId, SomeClass.InterfaceId, SomeClass.EventsId)> 
Public Class SomeClass 

    Public Const ClassId As String = "GUID1" 
    Public Const InterfaceId As String = "GUID2" 
    Public Const EventsId As String = "GUID3" 

    Public Sub SomeMethod(ByVal ParamArray values() As Object) 
     ''//Some Code Here  
    End Sub 
End Class 

然后我用regasm/TLB /代码库进行注册。所有的方法和属性似乎在VBA/VB6中都能正常工作,但是当我尝试使用ParamArray访问Method时,它不会事件编译。我得到的错误:

Compile error:

Function or interface marked as restricted, or the function uses an Automation type not suppport in Visual Basic.

什么我需要做的,以正确曝光此方法,以便这样?:

SomeClass.SomeMethod 1, 2, 3 

回答

3

the function uses an Automation type not supported in Visual Basic.

责任止于我可以使用它,没有相当于VB6中的参数数组。删除ParamArray关键字。 VB6代码必须传递一组变体。不愉快,考虑重新设计你的班级。

+1

再次感谢你们Obi Wan :) VB6/VBA中有参数文件,但它们是byref变量数组而不是byval对象数组。这是不兼容性的原因吗? – Oorang 2010-07-28 17:47:15

+1

如果这是真的,似乎很遗憾。您可以在VB6中创建接受参数数组的COM组件,但它们必须是变体数组,但是这种'Public Sub SomeMethod(ParamArray values()As Variant)''。你会希望COM互操作的东西能够将VB.Net ParamArray映射到VB6可以调用的东西。 http://msdn.microsoft.com/en-us/library/aa266305(v=VS.60).aspx – MarkJ 2010-07-28 17:53:02

+0

Variant ==对象。我不清楚这一点,不再有VB6文档。要开始一台旧机器,大约一年前,我记得我的膝盖在敲击。后来。 – 2010-07-28 17:53:28