Parametro por referencia o por valor

05/07/2012 - 19:37 por petito | Informe spam
Hola, soy nuevo en este foro, les agradesco de antemano por la ayuda que me puedan brindar. Les explico mi problema.
Me dieron un proyecto en c++ en el cual hay 3 archivos principales, un .dll que se encarga de abrir un puerto en serie y conseguir la data de un dispositivo conectado a dicho puerto; un archivo .h con las declaraciones de las funciones que contiene el .dll; y un archivo .cpp donde se llaman a las funciones del .h. Bueno estoy haciendo una aplicación en C# donde utilizo el .dll, sin embargo no consigo su correcto funcionamiento. Tengo diversos problemas en la aplicación pero todos parecidos, por ejemplo en la siguiente función:

status = GetVersion(buffer,32)

status tendrá 1 si la llamada a la función es satisfactoria y -1 en caso contrario. Mi problema es con el primer parámetro; en el proyecto en c++ buffer retorna la versión del dispositivo, pero en mi proyecto en C# no retorna dato alguno.
La declaración de la funcion es esta:
public static extern long GetVersion(char[] buffer, long maxlength), probé haciendo buffer un parámetro por referencia pero retorna error.
Estuve buscando y leyendo pero no entiendo como c++ trata ese parámetro, es decir por qué en el proyecto en c++ buffer devuelve data y no en el mio. Se me ocurrió que buffer fué declarado como parametro por referencia, pero al tratarlo así me da error con lo cual concluyo que fué declarado como parametro por valor. Si alguien pudiera decirme en qué me estoy equivocando o qué estoy omitiendo se lo agradecería mucho.
 

Leer las respuestas

#1 Hernán
06/07/2012 - 02:23 | Informe spam
En c# a buffer lo declaras como un StringBuilder de 32 chars de
capacidad.
Durante el marshalleo el chabón termina creando un char[32] o un
wchar_t[32], vos sabrás, y pasándole el puntero a ese espacio en el heap
no manejado. Cuando retorna el tipo e copia la data al string builder.
Vos llamás ToString y listo.

Preguntas similares