使用com-interop将一个数组从vba传递到c#是c#)什么是正确的方法?这是我的C#代码。如果我从vba调用Method1,它会失败并显示“预期的数组或用户定义的类型”或“该函数使用visualbasic不支持的自动化类型”。publicclassMyClass{publicMethod1(UserDefinedClass[]Parameters){...}publicMethod2(ObjectParameters){...}}我读过一些关于MarshallAsAttribute类的内容。这可能是c#代码中缺失的部分吗?这是我正在使用的vba代码:DimudtAsNewUserDefinedClassDimmyArray()myArray(1)=udtmyClass.Method1(myArray)myClass.Method2(myArray)IIRC你必须通过引用传递数组。尝试将您的方法声明为publicclassMyClass{publicvoidMethod1([In]refUserDefinedClass[]Parameters){...}...}如果您不想使用.NET客户端的ref参数污染您的类,您可以定义COM客户端使用的ComVisible接口,并显式实现它:[ComVisible(true)]publicinterfaceIMyClass{voidMethod1([In]refUserDefinedClass[]Parameters){...}...}publicclassMyClass:IMyClass{voidIMyClass.Method1(refUserDefinedClass[]Parameters){this.Method1(Parameters);}publicMethod1(UserDefinedClass[]Parameters){...}}**响应说明**如果你想公开一个集合而不是数组给VBA,你只需要公开一个枚举器,连同你想要的任何其他方法您的VBA代码能够调用(例如添加、删除、插入、清除...)。例如[ComVisible]publicinterfaceIUserDefinedClassCollection{IEnumeratorGetEnumerator();int计数{得到;};IUserDefinedClass这个[intindex]{get;}int添加(IUserDefinedClass项目);//等等,其他方法,如Remove、Clear、..然后,就可以像往常一样在VBA中使用了:以上是C#学习教程:使用com-interop将数组从vba传递到c#全部内容分享出来,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—DimobjUserDefinedClassesAsUserDefinedClassCollection...objUserDefinedClasses.AddobjUserDefinedClass...FornIndex=0将objUserDefinedClasses.Count下一个nIndex成员删除。如需转载请注明出处:
