28 diciembre, 2009

Error al importar librería msado15.dll de ADO

Al programar en Visual C++ 5.0 para un sistema de gestión de bases de datos (database management system, DBMS) relacional pensado para pequeñas aplicaciones de Windows como Microsoft Access 2000, utilizando la interfaz orientada a objetos, ActiveX Data Objects (ADO) para el acceso a la base de datos. Nos encontramos con que tenemos que importar en el fichero de cabecera (.h) correspondiente mediante la directiva # import la dll msado15.dll, pues bien, después de ponernos a tirar código resulta que al compilar nos encontramos con los siguientes errores :
  • ..\Debug\msado15.tlh(403) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
  • ..\Debug\msado15.tlh(1098) : error C2504: 'Connection15' : base class undefined
  • ..\Debug\msado15.tlh(1266) : error C2504: 'Recordset21' : base class undefined
  • ..\Debug\msado15.tlh(1286) : error C2504: 'Recordset20' : base class undefined
  • ..\Debug\msado15.tlh(1320) : error C2504: 'Recordset15' : base class undefined
  • ..\Debug\msado15.tlh(1706) : error C2504: 'Fields20' : base class undefined
  • ..\Debug\msado15.tlh(1740) : error C2504: 'Fields15' : base class undefined
  • ..\Debug\msado15.tlh(1794) : error C2504: 'Field20' : base class undefined
  • ..\Debug/msado15.tli(293) : error C2664: '_com_issue_errorex' : cannot convert parameter 2 from 'struct _Connection *const ' to 'struct IUnknown *'
  • ..\Debug/msado15.tli(481) : error C2664: '_com_issue_errorex' : cannot convert parameter 2 from 'struct _Recordset *const ' to 'struct IUnknown *'
  • ..\Debug/msado15.tli(491) : error C2664: '_com_issue_errorex' : cannot convert parameter 2 from 'struct Recordset21 *const ' to 'struct IUnknown *'
  • etc.
El error está perfectamente documentado en una revisión disponible en el sitio de soporte de Microsoft. El identificador del artículo es 190726 - Última revisión: martes, 18 de noviembre de 2003 - Versión: 2.0 y el título de la revisión: #Import de Visual C++ 5.0 produce errores con ADO versión 2.0 donde se comenta que se produce en los windows 95, 98 y NT, lista a la que añadimos también el 2000. De entre las alternativas ofrecidas, la mejor es sin lugar a dudas la primera, es decir, instalar Visual Studio, Service Pack 3 porque todo se debe a un antiguo problema de la característica #import del compilador que se corrigió en la versión full del correspondiente service pack 3. La obtención de este service pack puede hacerse de varias maneras, siendo la más cómoda acceder al centro de descargas de Microsoft o hacer un ftp a Microsoft, para lo que aconsejo el sitio FileWatcher y bajarse el vssp3 versión full que consta de nueve ficheros (de unos 10 MB cada uno) :
  1. VSSP3_1.EXE
  2. VSSP3_2.CAB
  3. VSSP3_3.CAB
  4. VSSP3_4.CAB
  5. VSSP3_5.CAB
  6. VSSP3_6.CAB
  7. VSSP3_7.CAB
  8. VSSP3_8.CAB
  9. VSSP3_9.CAB
Lo primero una vez hecha la descarga es expandir el service pack ejecutando VSSP3_1.EXE, preferiblemente desde un prompt MS-DOS. Esto creará el directorio vs97_sp3 y ya podremos ejecutar el SETUP.EXE para instalar el service pack que soluciona nuestro problema.

17 noviembre, 2009

Problema con el ordinal 5084 en MFC42D.dll

Ayer empezamos un nuevo desarrollo con el viejo IDE Microsoft Developer Studio 97 en Visual C++ 5.0 y tras generar un MFC AppWizard[exe] y compilar en modo Win32 Debug nos apareció la siguiente ventana al ir a ejecutar:
"No se ha podido localizar el ordinal 5084 en la biblioteca de vínculo dinámico MFC42D.dll".
Después de buscar en diferentes sitios, blogs, foros, manuales, soporte de Microsoft, etc. no encontramos nada que solucionase el problema. En general se insiste en sustituir la librería MFC42D.dll por otra con una versión diferente, en unos casos se recomienda sustituir la v4.21.7022 por una superior como la 6.0.8168, la 6.00.8665, etc. o al revés, otras veces el consejo es bajar de versión. La solución que ha funcionado ha sido desinstalar el IDE y volverlo a instalar: sencillo y efectivo. Ahora el debugger y la ejecución en modo debug van como la seda.

Un saludo

08 octubre, 2009

La conjetura de Goldbach y un problema imposible.



En matemáticas hay muchas conjeturas, de todas ellas la más famosa es la de Goldbach. Apareció mencionada por primera vez en una carta de Christian Goldbach a Leonhard Euler en 1742. En ella el matemático prusiano (1690-1764) le plantea la conjetura a su colega suizo:
"Cualquier número par mayor que dos es la suma de dos números primos"
La conjetura ha sido verificada hasta números enormes, pero aún no se ha encontrado ningún argumento matemático que demuestre que es cierta para todo número par.
Tenemos que recordar esta conjetura para poder resolver el llamado "problema imposible", que aparece en uno de los muchos artículos que publicó Martin Gardner en la columna juegos matemáticos de la revista de divulgación "Scientific American". El problema se plantea así:
«Se eligen dos números, no necesariamente distintos, en el conjunto de números enteros positivos mayores que 1 y no mayores que 20. Al matemático S se le da solamente la suma de estos números. Y al matemático P se le hace saber solamente su producto.

Por teléfono, S le dice a P: “No veo cómo vas a poder averiguar mi suma”. Una hora más tarde, P devuelve la llamada a S y le comunica “Ya sé cuánto vale tu suma”. Más tarde, S llama otra vez a P y le informa “Ahora ya conozco tu producto”.

¿De qué números se trata?»

 
Un saludo

Infolinks In Text Ads