2010-06-18 2 views

답변

1

ODBC 설치 정보는 드라이버 DLL을 가리 킵니다. ODBC 엔트리 포인트가있는 자신의 DLL로 대체 할 수 있습니다. 간단히 "진짜"DLL에 대한 간단한 호출이 아니라 상관하지 않는 모든 것을 만드십시오. execute 및 prepare 진입 점은 드라이버 DLL에 전달하기 전에 주어진 문을 수정할 수 있습니다.

예를 들어 사용자 DSN을 사용하는 경우 HKCU \ Software \ ODBC.ini \ datasourcename \ Driver의 값을 사용자 자신의 shim DLL로 바꿀 수 있습니다.

약간의 인터넷 검색 후, 이상적인 출발점이 될 명백한 빈 쉘 프로젝트를 찾지 못했습니다. API reference에는 API에 대한 세부 정보가 있습니다. 그러나 일반적으로 정보는 필요 없습니다. 각 API에 대한 매개 변수를 actuall 드라이버 DLL에 전달하면됩니다. 함수 프로토 타입은 sql.hsqlext.h에서 추출 할 수 있습니다.

shim DLL을 작성하는 것보다 쉬운 다른 방법은 실행 및 준비 함수 (아마도 SQLExecDirect 및 SQLPrepare)를 연결하는 것입니다. This article은 내가 그 일을 처음 본 적중입니다.

+0

조언을 주셔서 감사합니다. 나는 그것에 대해 생각해 보았습니다. 내 보낸 된 모든 메서드를 전달하는 C++ DLL 할려고했지만 운 좋게 작동하도록 가져 오지 못했습니다. google에 어떤 좋은 키워드? 다시 한번 감사드립니다. – TwoBitsShort

+0

@Christian : 내보내기에'extern "C"'를 사용하여 이름이 엉망이되지 않도록해야합니다. DLL에'dumpbin/exports'를 사용하여 장식되지 않았는지 확인할 수 있습니다. 나는 약간의 주위에 구글을 찌를 것이고, 내가 뭔가를 찾을 수 있는지 알 것이다. 모든 엔트리 포인트 함수가 정의 된 빈 쉘을 얻는 것이 이상적입니다. ... 그 자연의 무언가가 존재해야하는 것처럼 보입니다. –

+0

@mark : dumpbin으로 스캔 한 다음 .def 파일을 사용하여 내 보낸 모든 함수를 선언했습니다. 주 루틴은 원래 ODBC 드라이버의 loadlibrary를 수행하고 shim dll을 가리 키도록 레지스트리를 변경했습니다. 나는 또한 프라그 마 접근법을 시도했다. 드라이버가 SQLDirectConnectW 메서드를 지원하지 않는다는 통지를받을 때마다. DirectConnectW는 내보내기 테이블에 없으며 DirectConnect의 유니 코드 버전입니다. 어떤 아이디어? – TwoBitsShort