윈도우 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 라이브러리를 선택하면 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
- http://www.flickr.com/photos/kaistizen/2173470671/
- http://farm3.static.flickr.com/2413/2173470671_c89b64df0e.jpg
- http://www.flickr.com/photos/kaistizen/2173470599/
- http://farm3.static.flickr.com/2304/2173470599_180e7514e4.jpg