繁体   English   中英

将字符串数组从 VB6 传递到 C#.net

[英]Passing string array from VB6 to C#.net

如何通过 COM 互操作将 VB6 字符串数组 [Assume, s =Array("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;
}

VB

Dim str As Variant

Debug.Print ".NET server returned: "    
For Each str In dotNETServer.GetArray      'dotNETServer=TestServer.Test
    Debug.Print str
Next

Dim arr(3) As String
arr(1) = "Pahee"
arr(2) = "Tharani"
arr(3) = "Rathan"

dotNETServer.SetArray (arr) 'This one causing the compile error which I mentioned earlier

更新: ::::::

我们需要在 C# 中将数组作为引用传递 在接口和方法中改变它

void SetArray(ref string[] arrayVal ); //ref added

编组为适当的类型将解决您的问题。 注意下面的编组和 ref 关键字更改

void ITest.SetArray([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VT_BSTR)] ref string[] arrayVal)
{
   string[] stringArray1 = arrayVal;
}

我根据您的代码和您无法从 VB6 获取数据的问题制作了此解决方案。 如果上述解决方案对您不起作用,请尝试在此处找到适合您的应用程序的数组类型/子类型http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.110).aspx

您的问题出在 Vb6 代码中:

dotNETServer.SetArray (arr)

这实际上是强制arr按值传递,因为它被括号括起来,没有Call关键字。

你想这样做:

Call dotNETServer.SetArray(arr)

或者

dotNETServer.SetArray arr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM