• Jueves 28 de Marzo de 2024, 22:19

Autor Tema:  Obtener Valor Al Que Apunta Un Puntero  (Leído 2634 veces)

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Obtener Valor Al Que Apunta Un Puntero
« en: Jueves 26 de Abril de 2007, 16:28 »
0
Creo que ya se ha visto que estoy trabajando con DLL's y en una de las funciones para obtener un valor a través de una DLL debo enviar un puntero de un arreglo de bytes de tamaño variable.

Yo solo obtengo la dirección donde apunta, pero me gustaria poder obtener el valor que me muestra, veo los metodos tradicionales y no me funciona en teoría, puede que esté haciendo algo mal yo o quizás estoy equivocado en el concepto.

Pero alguien me podría explicar como obtener el valor de que está almacenado en una dirección de memoria?.

En la funcion existe un char que es puntero y quiero asignarle el valor que almacena a un arreglo de char.

Muchas gracias.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #1 en: Jueves 26 de Abril de 2007, 18:29 »
0
A ver si entiendo, tienes una dll (que no aclaras si esta construida en managed o unmanaged) , lo otro como estamos en el foro de C# te aclaro que aqui no existen los punteros (por lo menos como los veiamos en C,C++) asi que asumo que si las funciones de la dll te piden punteros es que son Unmanaged.Mi pregunta antes de darte  una idea de como hacerlo es que si en la dll tienes ambas funciones la que coloca valores mediante un puntero y la que lee valores mediante un puntero

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #2 en: Jueves 26 de Abril de 2007, 18:59 »
0
No conozco la definición de managed o unmanaged. Solo se que está realizada en C++ y que la llamo mediante DLLImport (para lo cual recibi mucha ayuda de JuanK).

La DLL me retorna el valor de un puntero que apunta a la dirección donde comienza del valor que deseo rescatar.

La DLL lee valores mediante punteros y los escribe tambien. Y como te expliqué le envio y recibo respuesta sin problemas.

Lo que debo rescatar es un unsigned char de largo variable. Me retorna dicho puntero y tambien el largo.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #3 en: Jueves 26 de Abril de 2007, 23:19 »
0
Citar
Lo que debo rescatar es un unsigned char de largo variable. Me retorna dicho puntero y tambien el largo.

Aqui quede pillo ya que en c# unsigned char tiene largo fijo no variable, si te refieres a eso de un largo variable a un string,en c# eso es otra cosa.Puedes colocar algo de codigo incluyendo la parte de los DllImport.

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #4 en: Viernes 27 de Abril de 2007, 22:46 »
0
Lo logré, fue un parto mental con la ayuda de un compañero:

Lalo tienes razon, tiene un largo fijo, pero si lo asignas como arreglo, puedes manejar tu el tamaño.

Código: Text
  1. unsigned char variable [valor_entero];
  2.  

Código: Text
  1. arreglo = new byte[(int)largo_variable_char];
  2.  
  3.                         for (int i = 0; i < (int)largo_variable_char - 1; i = i + 2)
  4.                         {
  5.                             arreglo[i] = (byte)(*variable_char & 0x00ff);
  6.                             arreglo[i + 1] = (byte)((*variable_char & 0xff00) >> 8);
  7.                             variable_char++;
  8.                         }
  9.  
  10.  

Lo dejo por si a alguien le sirve.

La gracia es que la dll devuelve un valor de 8 bits y char es de 16 bits, asi que lo maneje como bytes. Y ademas en cada valor guardado del arreglo de unsigned char guarda 2 valores por lo cual se enmascara y se obtiene solo el valor que se desea. Luego se corre 8 bits.

Grax.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

orosello

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #5 en: Viernes 4 de Mayo de 2007, 17:31 »
0
Hola:
      Yo tengo un problemilla algo parecido, solo que no quiero rescatar un valor de retorno, sino pasarle una prametro (desde C#) a la DLL (en c++).  El parametro que espera la funcion de la Dll es un char* que es pasado desde un campo de texto en C# . (servicename seria el parametro que espera la funcion de la DLL)

void InstallService(char* servicename)
{  
   char pServiceName[MAX_PATH];
   strcpy(pServiceName,servicename);
  .......
}

He probando con arraychar, string, ...... y solo me toma el primer caracter de la cadena que le paso.

Les agradeceria la ayuda  



Saludos Orosello

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Obtener Valor Al Que Apunta Un Puntero
« Respuesta #6 en: Viernes 4 de Mayo de 2007, 17:59 »
0
Como haces la llamada a la DLL en C#?

El char en C++ es equivalente a byte, asi que sería bueno que probaras con ese tipo.

Pero como te digo podrias mostrar el codigo para poder ayudarte, no creo que sea complejo, ya llevo 3 semanas trabajando en esto y creo que he aprendido bastante.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]