2010-06-18 4 views

risposta

1

Le informazioni di installazione ODBC fanno riferimento alla DLL del driver. È possibile sostituirlo con la propria DLL che ha i punti di accesso ODBC. Semplicemente fai in modo che tutti quelli a cui non ti importa siano semplici chiamate alla DLL "reale". L'esecuzione e la preparazione dei punti chiave possono modificare l'istruzione data prima di passarla alla DLL del driver.

Ad esempio, se si utilizza un DSN utente, è possibile sostituire il valore in HKCU \ Software \ ODBC.ini \ datasourcename \ Driver con il proprio shim DLL.

Dopo un po 'di ricerca su google, non sto trovando un progetto di shell vuoto ovvio che sarebbe un punto di partenza ideale. Lo API reference ha dettagli sull'API. In generale, però, non dovresti davvero avere bisogno di informazioni da lì. Hai solo bisogno di passare i parametri per ogni API alla DLL del driver actuall. I prototipi di funzione potrebbero essere estratti da sql.h e sqlext.h.

Un metodo alternativo che potrebbe essere più semplice rispetto alla scrittura di uno shim DLL sarebbe quello di agganciare solo l'esecuzione e preparare le funzioni (probabilmente solo SQLExecDirect e SQLPrepare). This article è il primo colpo che ho visto nel farlo.

+0

Grazie per il consiglio, ci avevo pensato. Ho provato a fare una DLL C++ che ha inoltrato tutti i metodi esportati, ma non ho avuto fortuna a farlo funzionare. Qualche buona parola chiave per google? Grazie ancora. – TwoBitsShort

+0

@Christian: assicurati di utilizzare "extern" C "' sulle esportazioni in modo che i nomi non vengano storpiati. Puoi usare 'dumpbin/exports' sulla DLL per assicurarti che non siano decorati. Mi giro un po 'con Google e vedo se riesco a trovare qualcosa. Idealmente, sarebbe bello avere un guscio vuoto che ha tutte le funzioni del punto di accesso definite. ... Sembra che qualcosa di quella natura debba esistere. –

+0

@mark: ho scansionato con dumpbin e poi ho usato i file .def per dichiarare tutte le funzioni esportate. La routine principale fa una loadlibrary del driver orig odbc e ho cambiato il registro per puntare al mio shim dll. Ho anche provato l'approccio pragma. Ogni volta che viene visualizzato un avviso che il driver non supporta il metodo SQLDirectConnectW. DirectConnectW non è nella tabella di esportazione ed è solo una versione Unicode di DirectConnect. Qualche idea? – TwoBitsShort