2010-06-18 10 views

Odpowiedz

1

Informacje o konfiguracji ODBC wskazują na DLL sterownika. Można go zastąpić własną biblioteką DLL z punktami wejścia ODBC. Po prostu spraw, aby wszystkie te, których nie obchodzi, były zwykłymi połączeniami z "prawdziwą" biblioteką DLL. Wykonanie i przygotowanie punktów początkowych może zmodyfikować podaną instrukcję przed przekazaniem jej do biblioteki DLL sterownika.

Na przykład, jeśli używasz DSN użytkownika, możesz zastąpić wartość w HKCU \ Software \ ODBC.ini \ datasourcename \ Driver własną biblioteką shim.

Po odrobinie wyszukiwania google nie znajduję oczywistego projektu pustej powłoki, który byłby idealnym punktem wyjścia. Numer API reference zawiera informacje o interfejsie API. Ogólnie rzecz biorąc, nie powinieneś naprawdę potrzebować tam informacji. Trzeba tylko przekazać parametry dla każdego interfejsu API do biblioteki DLL sterownika. Prototypy funkcji można wyodrębnić z sql.h i sqlext.h.

Alternatywną metodą, która może być łatwiejsza niż pisanie biblioteki shim DLL, jest podpięcie tylko funkcji wykonywania i przygotowania (prawdopodobnie tylko SQLExecDirect i SQLPrepare). This article to pierwsze trafienie, które zobaczyłem.

+0

Dzięki za radę, pomyślałem o tym. Próbowałem zrobić DLL C++, który przekazał wszystkie wyeksportowane metody, ale nie miał szczęścia, aby to zadziałało. Jakieś dobre słowa kluczowe do google? Dzięki jeszcze raz. – TwoBitsShort

+0

@Christian: Upewnij się, że używasz 'extern" C "' w eksporcie, aby nazwy nie były zniekształcone. Możesz użyć 'dumpbin/exports' na DLL, aby upewnić się, że nie są one udekorowane. Pokłębię się trochę z Google i zobaczę, czy coś mogę znaleźć. Najlepiej byłoby uzyskać pustą powłokę, która ma zdefiniowane wszystkie funkcje punktu wejścia. ... Wygląda na to, że coś takiego powinno istnieć. –

+0

@mark: Zeskanowałem za pomocą dumpbin, a następnie użyłem plików .def, aby zadeklarować wszystkie wyeksportowane funkcje. Główna rutyna wykonuje loadlibrary sterownika orig odbc i zmieniłem rejestr tak, aby wskazywało na moją bibliotekę shim. Próbowałem także podejścia pragma. Za każdym razem dostaję informację, że sterownik nie obsługuje metody SQLDirectConnectW. DirectConnectW nie znajduje się w tabeli eksportu i jest tylko wersją DirectConnect w standardzie Unicode. Jakieś pomysły? – TwoBitsShort

Powiązane problemy