【问题标题】:Passing string array from VB6 to C#.net将字符串数组从 VB6 传递到 C#.net
【发布时间】:2014-05-07 01:56:15
【问题描述】:

如何通过 COM Interop 将 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

更新: :::::::

We need to pass the array as reference in C#。在接口和方法中改一下

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

【问题讨论】:

  • 在VB6中使用字符串数组,Dim arr(42) As String。如果您有 Option Base 0 有效,它会自动编组为 string[]。如果您出于某种原因想使用 Variant 进行操作,那么您必须在 C# 中使用 object 并进行强制转换。
  • @HansPassant,非常感谢。对我的问题有任何想法将 VB6 字符串数组发送到 C#?
  • 我在谈论编组字符串 from vb6 to C#。这意味着“发送”。

标签: c# com vb6 interop com-interop


【解决方案1】:

编组为适当的类型将解决您的问题。注意下面的编组和 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

【讨论】:

  • 你是对的。当我将 ref 关键字添加到数组参数时。这是工作。刚找到。谢谢
【解决方案2】:

您的问题出在 Vb6 代码中:

dotNETServer.SetArray (arr)

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

你想这样做:

Call dotNETServer.SetArray(arr)

dotNETServer.SetArray arr

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2011-05-27
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多