윈도우 2003 서버를 기준으로 ADO 바이너리가 두 군데 나뉘어 배포된다. x32 바이너리는 C:\Program Files (x86)\Common Files\System\ado\에 있고, x64 바이너리는 C:\Program Files\Common Files\System\ado\에 있다. 그러니 ADO를 import할 땐 이런 식으로 하면 된다.

#import "C:\Program Files\Common Files\System\ado\msado15.dll"

이 코드에서 눈에 거슬리는 부분은 역시 경로를 하드코딩했다는 점이다. typelib 아이디를 사용해 참조하는 방법이 떠오른다.

#import "libid:EF53050B-882E-4776-B643-EDA472E8E3F2"

하지만 아쉽게도 이 방법을 쓸 수 없는 듯 하다. 그 이유를 알아보려면 OLE/COM Object Viewer를 열어봐야 한다.

ADO MD Library

ADO MD Library21

ADO Library

ADO Library43

ADO MD 라이브러리를 선택하면 x64 바이너리가 어디 있는지 알려준다. 하지만 이상하게도 ADO 라이브러리를 선택하면 x32 바이너리에 대한 정보만 보여준다. 왜 이렇게 해놨는지 여전히 의문이지만, 일단 typelib 아이디를 사용하기는 어려울 듯 싶다.

현 시점에서 내가 생각하는 최적의 코드는 다음과 같다.

#if defined(WIN64)
#import "C:\Program Files\Common Files\System\ado\msado15.dll"
#else
#import "libid:EF53050B-882E-4776-B643-EDA472E8E3F2"
#endif

물론 이것은 WIN32 윈도우 환경에서 x64 바이너리를 빌드한 다음, 이렇게 생산한 최종 결과물을 x64 윈도우 환경에 배포하지 않는다는 가정에서만 유효하다.


혹 하드코딩을 피할 방법을 알고 계시면 지혜를 나눠주세요~

Links

  1. http://www.flickr.com/photos/kaistizen/2173470671/
  2. http://farm3.static.flickr.com/2413/2173470671_c89b64df0e.jpg
  3. http://www.flickr.com/photos/kaistizen/2173470599/
  4. http://farm3.static.flickr.com/2304/2173470599_180e7514e4.jpg