MFC escribe tipo de datos doble en el registro

Estoy trabajando en una aplicación que necesita almacenar un valor de datos de tipo doble en el registro. Estoy usando MFC pero las únicas funciones en "theApp" que veo para hacer el trabajo (de la búsqueda que he hecho) son GetProfileIntW, GetProfileStringW y GetProfileBinary. ¿Cuál sería la mejor manera de almacenar y recuperar los datos manteniendo la mayor precisión posible?

preguntado el 12 de abril de 13 a las 19:04

¿Hay alguna razón para no usar las funciones de registro de Win32 directamente? -

@CareyGregory, MFC coloca automáticamente sus claves en un lugar apropiado en el registro. Es solo una cosa de conveniencia. -

1 Respuestas

La función GetProfileBinary es la única opción razonable. Usar una cadena significaría hacer conversiones y usar un int perdería precisión en muchos casos.

double *pMyDouble;
UINT size = sizeof(*pMyDouble);
GetProfileBinary(sectionName, valueName, (LPBYTE *)&pMyDouble, &size);
double myDouble = *pMyDouble;

Respondido 13 Abr '13, 05:04

Recibo un error para el tercer argumento: "El tipo de argumento de 'doble *' es incompatible con el tipo de parámetro de 'LPBYTE *'". - tchapman500

@TimothyChapman Editado nuevamente después de notar que GetProfileBinary hace lo inusual de devolver un puntero a los datos en el tercer parámetro en lugar de devolver los datos a un búfer que proporciona. Lo siento, pero es una de las pequeñas cosas que me hacen odiar el MFC. - carey gregorio

Gracias. No hubo errores de compilación. Pero todavía no tengo suficiente del programa hecho para saber si realmente funcionó. Volveré a publicar cuando pueda poner algún tipo de valor de prueba. - tchapman500

No creo que haya un error 6052. Sugeriría publicar otra pregunta y mostrar su código. - carey gregorio

No importa. Descubrí por qué. Las claves de registro de destino no existen. Aparentemente, (solo para GetProfileBinary) necesito tener las claves de registro en su lugar. Agregué las claves manualmente y su código funcionó. Gracias. - tchapman500

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.