x64에서 ADO를 사용할 때 짜증나는 점

  • Post author:
  • Post category:
  • Post comments:3 Comments
  • Post last modified:February 7, 2020

윈도우 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 Library

ADO Library

ADO Library

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 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
종남
종남
15 years ago

안녕하세요. 저도 하드코딩을 피하고 싶어 SHGetFolderPath 나 libid를 찾아보았는데 #import 지시자에 변수를 사용할수 있는것도 아니여서 libid로 했네요. 깔끔한 방법을 얻고 싶어요 ㅠㅠ

후에라도 아시게되면 저도 ^^;
저도 스크랩해뒀다가 알게되면 덧글 달아둘게요ㅎ

최재훈
15 years ago

하하, 아직까진 타협하고 삽니다. 다음에 또 ADO 프로그래밍을 하게 되면 알아보겠습니다.