Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Parametro por referencia o por valor

1 view
Skip to first unread message

petito

unread,
Jul 5, 2012, 1:37:32 PM7/5/12
to
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.

Hernán

unread,
Jul 5, 2012, 8:23:54 PM7/5/12
to
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.

0 new messages