Objeto COM con arrays como parámetros

01/08/2005 - 12:59 por Jose | Informe spam
Hola a todos:
Tengo un proyecto en el que he añadido un objeto COM, del cual necesito
utilizar un método de este manera:
DAMSERVERLib.DAMClass.SearchNetworkInterface(ref System.Array ports , out
System.Array handles )
Se por un ejemplo que he visto en VB6 que los arrays que se le pasan son del
tipo long[].
El caso es que cuando se los paso obtengo un error
System.Runtime.InteropServices.SafeArrayTypeMismatchException.
¿Alguien me puede indicar como tengo que pasarle los arrays del tipo long al
metodo como ref o como out para que me funcione?

Saludos cordiales

Preguntas similare

Leer las respuestas

#1 Tristan
01/08/2005 - 13:32 | Informe spam
Por la pinta de la declaración del método, yo probaría algo como lo siguiente:

int[] ports = {1, 2, 3, 4, 5};
Array arrayPorts = (Array) ports;
Array arrayHandles;
metodo(ref arrayPorts, out arrayHandles);
int[] handles = (int[]) arrayHandles;
MessageBox.Show(handles[0].ToString());

private void SearchNetworkInterface(ref Array ports, out Array handles)
{
handles = new int[ports.Length];
handles.SetValue(1, 0);
}

Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
#2 Jose
01/08/2005 - 17:28 | Informe spam
Gracias. Me ha funcionado.
No sabia que la corresponcia del long[] era int[].




"Tristan" escribió en el mensaje
news:
Por la pinta de la declaración del método, yo probaría algo como lo
siguiente:

int[] ports = {1, 2, 3, 4, 5};
Array arrayPorts = (Array) ports;
Array arrayHandles;
metodo(ref arrayPorts, out arrayHandles);
int[] handles = (int[]) arrayHandles;
MessageBox.Show(handles[0].ToString());

private void SearchNetworkInterface(ref Array ports, out Array handles)
{
handles = new int[ports.Length];
handles.SetValue(1, 0);
}

Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
#3 Tristan
01/08/2005 - 19:22 | Informe spam
En realidad es debido a que vb6 tiene unos tipos de longitud extraña. El
tipo integer de vb6 por compatibilidad, se quedó con la misma longitud del
8086. Los tipos .net tienen la longitud del resto de lenguajes.

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida