2010-06-18 22 views

Respuesta

1

La información de configuración de ODBC apunta a la DLL del controlador. Puede reemplazar eso con su propia DLL que tiene los puntos de entrada ODBC. Simplemente haga que todas las que no le interesan sean simples llamadas a la DLL "real". La ejecución y preparación de los puntos de entrada podrían modificar la declaración dada antes de pasarla a la DLL del controlador.

Por ejemplo, si utiliza un DSN de usuario, puede reemplazar el valor en HKCU \ Software \ ODBC.ini \ nombre de origen de datos \ Driver con su propia DLL shim.

Después de googlear un poco, no estoy encontrando un proyecto de shell vacío obvio que sería un punto de partida ideal. El API reference tiene detalles sobre la API. En general, sin embargo, no deberías necesitar información de allí. Solo necesita pasar los parámetros para cada API a la DLL del controlador actual. Los prototipos de funciones se pueden extraer de sql.h y sqlext.h.

Un método alternativo que podría ser más sencillo que escribir una shim DLL sería enganchar simplemente las funciones de ejecución y preparación (probablemente solo SQLExecDirect y SQLPrepare). This article es el primer golpe que vi al hacer eso.

+0

Gracias por el consejo, había pensado en eso. Traté de hacer una DLL C++ que reenvió todos los métodos exportados, pero no tuve suerte para que funcione. ¿Alguna buena palabra clave para google? Gracias de nuevo. – TwoBitsShort

+0

@Christian: asegúrese de utilizar 'extern" C "' en las exportaciones para que los nombres no se alteren. Puede usar 'dumpbin/exports' en la DLL para asegurarse de que no estén decorados. Examinaré un poco con Google y veré si puedo encontrar algo. Idealmente, sería bueno tener un shell vacío que tenga definidas todas las funciones del punto de entrada. ... Parece que algo de esa naturaleza debería existir. –

+0

@mark: Escaneé con dumpbin y luego usé archivos .def para declarar todas las funciones exportadas. La rutina principal hace una loadlibrary del controlador de odbc original y modifiqué el registro para apuntar a mi shim dll. También probé el enfoque pragma. Cada vez que recibo un aviso de que el controlador no es compatible con el método SQLDirectConnectW. DirectConnectW no está en la tabla de exportación, y es solo una versión unicode de DirectConnect. ¿Algunas ideas? – TwoBitsShort

Cuestiones relacionadas