증상 ::
Windows 7 에서 ado 컴파일후 하위 버전 OS 에서 프로그램 실행시 에러 발생 혹은 다운
REGDB_E_CLASSNOTREG (0x80040154)
E_POINTER (0x80004003)
E_NOINTERFACE (0x80004002)
원인 ::
Windows 7의 ado 인터페이스와 하위 OS 에 있는 ado 인터페이스 불일치
해결 방법 : http://support.microsoft.com/kb/2517589
하위 호환 되도록 별도 tlb 를 등록하여 컴파일한다.
step1. 아래 파일중 적절한 tlb 다운로드
msado60_Backcompat_i386.tlb
msado60_Backcompat_ia64.tlb
msado60_Backcompat_x64.tlb
step2. tlb 파일 (msado60_Backcompat_i386.tlb로 가정) 을 아래 폴더에 복사
%Commonprogramfiles%\system\ado\ (보통 C:\Program Files\Common Files\system\ado)
step3. tlb 파일을 레지스트리에 등록
관리자 권한의 cmd.exe 에서 아래 명령어 실행
c:\> %windir%\Microsoft.NET\Framework\v4.0.30319\Regtlibv12 %CommonProgramFiles%\System\ado\Msado60_Backcompat_i386.tlb
step4. 레지스트리 등록 확인
HKEY_CLASSES_ROOT\TypeLib\{0C0FF45D-87C8-4333-9075-3D9B4D64F9FC}\6.0
HKEY_CLASSES_ROOT\TypeLib\{0C0FF45D-87C8-4333-9075-3D9B4D64F9FC}\6.0\0\win32
tlb의 절대경로 값(%commonprogramfiles%\system\ado\msado60_backcompat_i386.tlb)
[출처] Windows7 SP1 설치 후 ADO 응용 프로그램 오류 문제|작성자 김재범
step5. 소스 코드 수정
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "EndOfFile")
를
#import "C:\Program Files\Common Files\System\ado\msado60_Backcompat_i386.tlb" rename("EOF", "EndOfFile")
로 수정
step6. 컴파일 후 정상동작 확인
관련 블로깅들 ::
http://blog.naver.com/PostView.nhn?blogId=jaebeom&logNo=110106721084
'C++' 카테고리의 다른 글
윈도우 uuid(guid) 생성 (0) | 2012.05.20 |
---|---|
std::string 문자열 조작 (0) | 2012.05.20 |
url encode (0) | 2012.05.04 |
컴파일시 해야할 일 표시하기 #pragma message 사용 (0) | 2012.04.15 |
MFC, GDI (0) | 2012.04.06 |
WTL : Windows Template Library (0) | 2012.04.06 |
log4cxx warning 관련 C4275 (0) | 2012.04.06 |
OTL 샘플 (0) | 2012.04.06 |