使用com-interop将用户定义的类数组从vba传递到.net(特别是c#)的正确方法是什么?
这是我的c#代码.如果我从vba调用Method1,它会因"期望的数组或用户定义类型"或"函数使用visual basic中不支持的自动化类型"而失败.
public class MyClass
{
public Method1(UserDefinedClass[] Parameters) { ... }
public Method2(Object Parameters) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些关于MarshallAsAttribute类的内容.这可能是c#代码中缺少的部分吗?
这是我正在使用的vba代码:
Dim udt As New UserDefinedClass
Dim myArray()
myArray(1) = udt
myClass.Method1(myArray)
myClass.Method2(myArray)
Run Code Online (Sandbox Code Playgroud) 如何通过COM Interop将VB6字符串数组[假设,s =数组("a","b","c","d")]传递给C#.Net?
我试图实现将C#字符串数组传递给VB,将VB字符串数组传递给C#,如下所示C# - > VB工作正常但其他方式(VB => C#)给出一个编译错误,称为"函数或接口标记为受限制,或者函数使用Visual Basic中不支持的自动化类型".我的代码如下
C#
public interface ITest
{
string[] GetArray();
void SetArray(string[] arrayVal );
}
public class Test : ITest
{
string[] ITest.GetArray() { //Working fine
string[] stringArray = { "red ", "yellow", "blue" };
return stringArray;
}
}
void ITest.SetArray(string[] arrayVal) //Giving an issue
{
string[] stringArray1 = arrayVal;
}
Run Code Online (Sandbox Code Playgroud)
VB
Dim str As Variant
Debug.Print ".NET server returned: "
For Each str In dotNETServer.GetArray 'dotNETServer=TestServer.Test
Debug.Print str
Next
Dim …Run Code Online (Sandbox Code Playgroud)