윈도우 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 윈도우 환경에 배포하지 않는다는 가정에서만 유효하다.
혹 하드코딩을 피할 방법을 알고 계시면 지혜를 나눠주세요~
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
안녕하세요. 저도 하드코딩을 피하고 싶어 SHGetFolderPath 나 libid를 찾아보았는데 #import 지시자에 변수를 사용할수 있는것도 아니여서 libid로 했네요. 깔끔한 방법을 얻고 싶어요 ㅠㅠ
후에라도 아시게되면 저도 ^^;
저도 스크랩해뒀다가 알게되면 덧글 달아둘게요ㅎ
하하, 아직까진 타협하고 삽니다. 다음에 또 ADO 프로그래밍을 하게 되면 알아보겠습니다.
http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.vc.database&tid=8d6980c8-0800-452e-90ad-dc380712e5b4&cat=en_US_f570f9cb-5c35-4d29-9b60-7fee704bb077&lang=en&cr=US&sloc;=&p=1