Estoy creando un objeto COM Visible C# para las llamadas de proxy a un servicio web para la aplicación VB6. Tengo un método que devuelve una matriz de objetos.Cómo devuelvo una matriz/lista/colección de objetos desde C# a VB6
public DocActionReport[] DocActionReportByDateRange(System.DateTime reportStartDate, System.DateTime reportEndDate)
{
object[] results = this.Invoke("DocActionReportByDateRange", new object[] {
reportStartDate,
reportEndDate});
return ((DocActionReport[])(results[0]));
}
Cuando llamo a este método a través de Visual Basic 6, así:
Dim proxy As New QueueMovementServiceClient.ReadQueueInfo
Dim report() As QueueMovementServiceClient.DocActionReport
report = proxy.DocActionReportByDateRange(startDate, reportEndDate)
se ejecuta correctamente (Puedo ver que mediante el registro en el servicio web) pero no hay datos se devuelve al objeto en VB6 (LBound (informe) == 0, UBound (informe) == -1).
He intentado un par de enfoques diferentes (cambiando el método a un método nulo y pasando la colección como un parámetro ref
) pero no hay alegría hasta el momento.
¿Qué debo hacer para devolver una matriz de objetos (lista, colección, lo que sea) a un consumidor de VB6?
¿El lado VB tiene una biblioteca de tipos que tiene DocActionReport dentro? ¿Cuál es el tipo recibido en el lado VB (use TypeName)? ¿Ha creado una repro utilizando sus propios datos compatibles sin llamar a esto. Invoke()? –
Para responder a sus preguntas: Sí, DocActionReport existe dentro de la biblioteca de tipos. el tipo devuelto es "Objeto()" aunque Object Viewer lo enumera correctamente como "DocActionReport()". Tengo un cliente .NET para probar el dll y confirmar los resultados con y funciona como se esperaba. –
¿Estás seguro de que la matriz no está vacía? No pude reproducir tu problema. (¿Todavía te importa esta pregunta a estas alturas?) –