数组 – 如何将对象的数组/列表/集合从C#返回到VB6

我正在创建一个COM Visible C#对象来代理对VB6应用程序的webservice的调用.我有一个返回一个对象数组的方法.

public DocActionReport[] DocActionReportByDateRange(System.DateTime reportStartDate, System.DateTime reportEndDate)
    {
        object[] results = this.Invoke("DocActionReportByDateRange", new object[] {
                    reportStartDate,
                    reportEndDate});
        return ((DocActionReport[])(results[0]));
    }

当我通过VB6调用这个方法,就像这样:

Dim proxy As New QueueMovementServiceClient.ReadQueueInfo
Dim report() As QueueMovementServiceClient.DocActionReport

report = proxy.DocActionReportByDateRange(startDate, reportEndDate)

它成功执行(我可以通过登录Web服务看到),但VB6(LBound(report)== 0,UBound(report)== -1)中的对象没有返回数据.

我已经尝试了几种不同的方法(将方法改为void方法并将集合作为参考参数传递),但是迄今为止没有喜悦.

我需要做什么来将一个对象数组(列表,集合,无论如何)返回给VB6消费者?

最佳答案
这是一个窍门给你:

>使用VB6 Com Object创建完全相同的界面
>将该dll导入.net
>用户反射器来查看生成的interop接口,这将希望能让你看到需要返回的类型,那么再次你可能只是得到对象,这根本不会帮助.

在VB6中,如果我的记忆力回到足够远的地步,他们就会用一些叫做SAFEARRAY的紧张的抽搐给我留下一些东西.

SAFEARRAY可能需要返回这里,看看这篇文章,希望它能帮助你(同样的问题)…

How to pass a SAFEARRAY from C# to COM

在阅读SAFEARRAY之后,我的直觉是你会决定返回一个字符串,并且在每个方面都有JSON和JSON解析器;

转载注明原文:数组 – 如何将对象的数组/列表/集合从C#返回到VB6 - 代码日志