BUG: 다른 형식 라이브러리에 참조를 실행 플랫폼 의존 렌더링 있다

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

281913
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
현상
둘 이상의 형식 라이브러리 (예: Microsoft Windows 2000 기반 컴퓨터) 한 플랫폼에서 참조하는 Visual Basic 프로젝트를 컴파일, 후 결과 이진 Microsoft Windows NT 4-, Microsoft Windows 95-, Microsoft Windows 98-, 및 Microsoft Windows ME 기반 컴퓨터) 같은 다른 플랫폼에서 실행할 수 실패하고 동안 액세스 위반 (AV)를 가져옵니다.
원인
dllname 형식 라이브러리의 항목을 읽을 때 Visual Basic 컴파일러에서 대/소문자를 구분합니다. 따라서 프로젝트를 참조하는 두 개 이상의 형식 라이브러리 및 라이브러리, dllname("kernel32.dll") 및 dllname("KERNEL32.DLL") 라이브러리의 B 같은 서로 다른 라이브러리 내의 다른 경우에는 같은 DLL의 dllname 항목에 철자를 경우 컴파일러는 두 가져오기 섹션을 같은 DLL에 [NULL]에 대한 생성하고 이진 플랫폼 종속 렌더링합니다.
현재 상태
Microsoft는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.
추가 정보

문제를 재현하기 위한 단계

  1. Windows 2000 기반 컴퓨터 및 Windows NT 4 기반 컴퓨터에 최신 서비스 팩이 모두 설정하십시오. 또한 Visual Basic 및 Visual C++ 6.0 서비스 팩 5 두 컴퓨터에서 모두 설치하십시오.
  2. Windows 2000 기반 컴퓨터에서 복사/붙여넣기 다음 IDL (인터페이스 설명 언어) 메모장에, 코드 및 lcase.idl 파일로 저장합니다. MIDL.EXE, midl lcase.idl 컴파일하십시오. 결과 형식 라이브러리를 lcase.tlb 라는.
    [  uuid(D618AA4D-814A-47a2-9AC1-DDE18EDF1C54),  version(1.0),  helpstring("Lower case test")]library lcasetest{    [      dllname("kernel32.dll"),      version(1.0),      helpstring("Sleep function exported by kernel32.dll")    ]    module lcasetest {        [			entry("Sleep"), 			helpstring("sleep - lcase test.")		]        void _stdcall Sleep([in] long dwMS);    };};					
  3. 다음 IDL 코드 를 함께 ucase.tlb 으로 1 단계에서 빌드:
    [  uuid(3F215C63-D0AD-4980-93F2-5DDF850061E4),  version(1.0),  helpstring("Upper case test")]library ucasetest{    [      dllname("KERNEL32.DLL"),      version(1.0),      helpstring("Sleep function exported by kernel32.dll")    ]    module lcasetest {        [			entry("Sleep"), 			helpstring("sleep - ucase test.")		]        void _stdcall Sleep([in] long dwMS);    };};					
  4. Visual Basic 표준 EXE 프로젝트를 만듭니다. 기본적으로 Form1이 만들어집니다.
  5. 프로젝트 메뉴에서 참조 선택하려면 클릭하십시오. 참조 대화 상자에서 lcase.tlbucase.tlb 찾아보기 두 라이브러리 모두 선택한 다음 확인 을 클릭하십시오.
  6. Form1에 다음 코드를 추가합니다:
    Private Sub Form_Load()    lcasetest.Sleep 1    ucasetest.Sleep 1End Sub					
  7. 파일 메뉴에서 저장 프로젝트를 클릭한 다음 프로젝트를 컴파일하여 만들기 Project1.exe 선택하십시오.
  8. Project1.exe, 실행 파일을 실행하고 폼을 오류 없이 나타납니다.
  9. Project1.exe Windows NT 4 기반 컴퓨터로 복사하고 이를 실행하십시오. 참고 액세스 위반이 발생합니다.
  10. 복사 및 Windows NT 4 기반 컴퓨터에서 동일한 프로젝트를 컴파일하고 모두 Windows NT 4 및 Windows 2000 기반 컴퓨터에서 실행하십시오. Windows 2000 기반 컴퓨터에서 실패한 유의하십시오.
tlbpatch

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 281913 - 마지막 검토: 02/24/2014 00:49:53 - 수정: 3.0

  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • kbnosurvey kbarchive kbmt kbbug kbcompiler kbnofix KB281913 KbMtko
피드백