Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理VBA中C#方法返回的字符串数组_C#_Vba_Com_Vb6 - Fatal编程技术网

如何处理VBA中C#方法返回的字符串数组

如何处理VBA中C#方法返回的字符串数组,c#,vba,com,vb6,C#,Vba,Com,Vb6,我用C编写了一个程序集,它返回一个字符串数组,C代码如下: [ComVisible(true)] public class PostcodeFinder { public string[] SearchPostcodes(string postCode) { var searchService = new QuickAddress("http://x.x.x.x:xxxx/") {Engine = Q

我用C编写了一个程序集,它返回一个字符串数组,C代码如下:

[ComVisible(true)]
public class PostcodeFinder
{
    public string[] SearchPostcodes(string postCode)
    {
        var searchService = new QuickAddress("http://x.x.x.x:xxxx/")
                                {Engine = QuickAddress.EngineTypes.Singleline, Flatten = true};

        var mPicklist = searchService.Search("GBR", postCode, PromptSet.Types.OneLine);
        var x = mPicklist.Picklist.Items.Count();

        var resultsToReturn = new string[x];

        for (var i = 0; i < x; i++)
        {
            resultsToReturn[i] = mPicklist.Picklist.Items[i].PartialAddress;
        }

        return resultsToReturn;
    }
}
编辑:这运行时没有错误,但是当我用
?results
查询即时窗口时,在下面放置一些伪代码以允许我放置断点后,我得到以下错误:

运行时错误“13”-类型不匹配

实际上,我想在VBA中重写以下C#代码:

var results = c.SearchPostcodes(postcodeToSearch);

foreach(var x in results)
{
    lstResults.Items.Add(x);
}

提前感谢

更新的答案:请尝试返回
对象,而不是返回
字符串[]

[ComVisible(true)]
public class PostcodeFinder
{
    public object SearchPostcodes(string postCode)
    {
        //Unchanged code

        return (object)resultsToReturn;
    }
}
执行
?results
(您需要指定一个索引,例如
?results(0)
)时,仍然会在即时窗口中出现类型不匹配错误,但是您可以通过以下方式迭代数组:

results = c.SearchPostcodes(postcodeToSearch)
Dim result As Variant
For Each result In results
    MsgBox result
Next result
原始答案:您需要实例化PostcodeFinder类。在btnSearch_单击子例程中,尝试:

Dim c As New PostcodeFinder
Dim results

results = c.SearchPostcodes(postcodeToSearch)
或者,您可以将声明与实例化分开,如下所示:

Dim c As PostcodeFinder
Dim results
Set c = New PostcodeFinder

results = c.SearchPostcodes(postcodeToSearch)

在VBA中,通过数组循环时,For Each循环中的元素必须是变量

Dim v As Variant
For Each v In Array("value 1", "value 2", "value 3")
    ' do something with v
Next v

在即时窗口中键入
?results
时出错,因为VBA无法将数组自动转换为字符串。您必须告诉它您想要数组的哪一部分,
?结果(2)
,或者使用
Join(sourcearray,delimiter)
告诉它如何转换数组,
?Join(results,”)

谢谢。现在运行时没有错误,但是我仍然不知道如何处理结果字符串数组。另外,如果我在下面放置了一些伪代码以允许放置断点,那么使用即时窗口键入
?results
我得到
运行时错误'13',键入不匹配
。问题是,当需要返回COM对象时,您正在从SearchPostcodes方法返回字符串数组。下面是另一个SO线程,该线程使用解决方案详细说明了此问题:。已使用其他问题的解决方案更新了我的答案。虽然我不确定这是否是最好的解决方案,但它提供了预期的功能。
Dim v As Variant
For Each v In Array("value 1", "value 2", "value 3")
    ' do something with v
Next v