[C con Clase] Leer ini ayuda

henry sanabria hensa22 en hotmail.com
Mar Feb 13 06:20:52 CET 2007


>From: Steven Davidson <steven en conclase.net>
>Reply-To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
>To: cconclase en listas.conclase.net
>Subject: Re: [C con Clase] Leer ini ayuda
>Date: Mon, 12 Feb 2007 00:15:14 -0600
>
>Hola Henry,
>
>El pasado 2007-02-12 03:07:55, henry escribió:
>
>h> gracias por la ayuda Steven, y por ser tan paciente en explicar a 
>detalle cada uno de los problemas
>
>De nada; para eso estamos.
>
>h> ahora yo cambie la funcion por la que sugeristes
>h> LPCSTR LeerIni( LPCSTR Seccion, LPCSTR Key, LPCSTR FileIni, LPCSTR 
>Valor="", int
>h> nCant,const  char ValorDefecto="-1" )
>h> {
>h>   GetPrivateProfileString( Seccion, Key, ValorDefecto, Valor, nCant, 
>FileIni );
>h>   return Valor;
>h> }
>h> pero sigue saliendo ese error, que no tengo idea de porque es :
>
>Veamos los errores.
>
>h> invalid conversion from `const char' to `const CHAR*'
>h>  initializing argument 3 of `DWORD GetPrivateProfileStringA(const CHAR*, 
>const CHAR*, const CHAR*, CHAR*, DWORD, const CHAR*)'
>
>Sospecho que el error está en los valores que pasas a la hora de invocar a 
>'LeerIni()'. Seguramente estás pasando un carácter para el tercer 
>parámetro. Esto es un error ya que espera encontrarse con una cadena 
>constante: 'const char *'.
>
>h>  invalid conversion from `const CHAR*' to `CHAR*'
>h>  initializing argument 4 of `DWORD GetPrivateProfileStringA(const CHAR*, 
>const CHAR*, const CHAR*, CHAR*, DWORD, const CHAR*)'
>h>
>
>Aquí el error está en que pasas un 'const char *' (Valor) como si fuese un 
>'char *' para el cuarto argumento. Obviamente esto es un error. El 
>parámetro 'Valor' debe ser de tipo 'char *', porque contendrá la cadena 
>resultante de la operación. Dicho de otro modo, 'Valor' es un parámetro de 
>salida.
>
>
>Por último, tienes otro error al indicar los parámetros por defecto. No 
>puedes elegir los parámetros que quieras para darles valores por defecto. 
>Existen ciertas reglas gramaticales para hacer esto. Basta con decir, que 
>la lista de los parámetros con valores por defecto es secuencial (sin 
>saltarse ningún parámetro) y empezando desde atrás. Dicho esto, tu 
>prototipo debería ser algo como el siguiente:
>
>LPCSTR LeerIni( LPCSTR Seccion, LPCSTR Key, LPCSTR FileIni, LPCSTR 
>Valor="",
>                 int nCant=1, const char *ValorDefecto="-1" );
>
>Si sigues teniendo problemas, deberías decirnos las sentencias donde se 
>encuentran los errores al >igual que mostrarnos las sentencias donde 
>invocas a tu función junto con las declaraciones de los >valores que pasas.

gracias por responder:

bueno, todos los errores eran en la linea de codigo
..-GetPrivateProfileString( Seccion, Key, ValorDefecto, Valor, nCant, FileIni 
);

bueno el problemo que yo no uso ninguna sentencia por motivos que explico en 
linas mas abajos.


ya tengo casi solucionado en problema, hize unos cambios a las funcion y 
quedo asi

void LeerIni(LPCSTR *Valor, LPCSTR *Seccion, LPCSTR *Key, LPCSTR *FileIni
, long *nCant)
{
  char *res;
  GetPrivateProfileString(Seccion, *Key,"-1", res, *nCant, *FileIni );
  *valor=LPCSTR(res);
}

bueno para ser mas claros, estoy creando una pequeña libreria  (DLL static 
win32)
y la quiero usar en otros lenguajes de programacion, por eso pongo los 
parametros como punteros por motivos que si no es asi, en otros lenguajes me 
sale error.

bueno, ya descubri el problema del mesaje de error
..-invalid conversion from `const CHAR*' to `CHAR*'
era porque mandaba como variable un tipo de dato LPCSTR,para que me retorne 
el valor que se va a leer desde el INI.
cuando mande char *res todo salia Ok y generaba el DLL.

ahora el problema es que ese char *res debo pasarlo al argumento LPCSTR 
*Valor para poder tomarlo desde VB ya que en este no puede usarse el tipo de 
dato char, me imagino que debo hacer algun tipo de conversion o algo 
similar, seria algo como :

*valor=LPCSTR(res)

compilo y se crea sin ningun problema el DLL,
pero cuando lo uso el DLL en VB, me devuelve basura y ademas se cuelga mi 
aplicacion de prueba a la tercera vez seguida que uso esa funcion.

pienso que el problema es por el tipo de conversion que hago al final, 
espero puedan darme algunas recomendaciones sobre el tipo de conversion si 
es la idonea o estoy equivocado, ya que soy nuevo en el tema de desarrollo 
de DLL con c++ y uso del tipo de dato LPCSTR .

muchas gracias de antemano.

_________________________________________________________________
Grandes éxitos, superhéroes, imitaciones, cine y TV... 
http://es.msn.kiwee.com/ Lo mejor para tu móvil.





Más información sobre la lista de distribución Cconclase