초기 바인딩 및 런타임에 바인딩에서 자동화를 사용하여

기술 자료 번역 기술 자료 번역
기술 자료: 245115 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

자동화 서버에 바인딩하는 방법을 성능, 유연성, 관리 용이성 같은 프로그램의 여러 가지 영향을 줄 수 있습니다.

이 문서에서는 자동화 클라이언트에 사용할 바인딩 형식을 설명하고 각 메서드의 양쪽 환경에서.

추가 정보

자동화 하나의 소프트웨어 구성 요소 통신하는 및 Microsoft의 사용하여 다른 소프트웨어 구성 요소를 제어하는 프로세스입니다 구성 요소 개체 모델 (COM). 응용 프로그램에 대한 Visual Basic 또는 같은 언어에 사용되는 대부분의 구성 요소 간 통신에 기초입니다 및 대부분의 프로그램은 일반 부분이 되었습니다.

지금까지는 자동화 개체에 있는 IDispatch 지원하는 모든 개체입니다 인터페이스. 이 인터페이스는 클라이언트에서 메서드를 호출할 수 있습니다 및 정확한 개체 알 필요 없이 런타임에 속성을 사용자가 디자인 타임에 통신하는, 런타임에 바인딩 프로세스를 합니다. 그러나 오늘날, 용어는 거의 모든 COM 개체를 자동화 개체에 적용할 수 있는 IDispatch 지원하지 않으며 따라서 런타임에 바인딩할 수 없습니다 심지어. 이 문서에서는 자동화 있는 개체가 두 바인딩 방법을 모두 지원하는 가정합니다.

어떤 바인딩?

바인딩 함수 호출 함수를 구현하는 프로그래머가 실제 코드 (내부 또는 외부) 로 작성된 일치하는 프로세스입니다. 응용 프로그램을 컴파일하고 코드를 실행하기 전에 코드에서 호출된 모든 함수가 바인딩되어야 때 수행됩니다.

프로세스를 이해하기 위해 북을 게시하는 측면에서 바인딩 생각하십시오. 텍스트 위치에 있는 특정 단락의 뭔가 "장에서는 12, 페이지를 x 자세한 내용은 참조하십시오 같은" 작성한 책의 같은 코드입니다 상상해 보십시오. 북이 완료된, 전 단락 의도한 대로 읽을 수 책의 모든 페이지를 함께 바인딩된 단락에 정확한 페이지 번호를 삽입한 때까지 페이지 번호는 무엇입니까 알 수 없습니다. "다른 북의 부분을 참조하기 전에 바인딩되어" 책에 대한 기다립니다.

소프트웨어 바인딩하는 것과 비슷합니다. 코드에서 "코드를 읽을 수 있습니다 전에" 함께 끌어올 할 부분은 이루어집니다. 바인딩 함수 바꾸는 작업입니다 메모리 주소나 메모리 오프셋이 더 정확한 수, 이름 "함수를 호출할 때 위치를 코드를 이동할지 것입니다". COM 개체를 개체에서 보유하는 메모리 오프셋 테이블에 대한 포인터 (v-table) 주소입니다. COM 함수 바인딩되면 v-table 통해 바인딩됩니다.

COM 개체 구조는 간단합니다. 코드가 개체 참조를 보유하는 경우 v-table 맨 간접 포인터를 보유합니다. v-table 메모리 주소를 배열을 각 항목은 해당 개체에 대해 호출할 수 있는 다른 함수를 이며 여기서. COM 개체에 대한 세 번째 함수를 호출하려면 표의 세 가지 항목을 아래로 이동 및 있을 주어진 메모리 위치로 이동합니다. 해당 함수의 코드를 실행하고, 작업이 완료되면 다음 코드 줄을 실행할 준비가 다시 반환합니다.

+-[Code]------------+  +.................................[COM Object]...+
|                   |  : +-------------+                                :
|Set obj = Nothing -|--->| obj pointer |                                :
|                   |  : +-|-----------+                                :
+-------------------+  :   |   +-----------------+                      :
                       :   +-->| v-table pointer |                      :
                       :       +--|--------------+                      :
                       :          |                                     :
                       :          |  +----------------------------+     :
                       :  (3rd)   |  | Function 1 Address pointer |     :
                       : (Offset) |  +----------------------------+     :
                       :          |  | Function 2 Address pointer |     :
                       :          |  +----------------------------+     :
                       :          +->| Function 3 Address pointer |     :
                       :             +----------------------------+     :
                       +................................................+

				
위의 예제에서는 COM 개체를 해제하는 때 일어나는 상황을 보여 줍니다. 모든 COM 개체의 IUnknown에서 상속하므로 테이블의 처음 세 항목은 IUnknown 하는 메서드입니다. 개체를 비워야 할 때 코드를 v-테이블 (IUnknown::Release) 세 번째 함수를 호출합니다.

다행히 이 작업은 Visual Basic에서 내부적으로 수행됩니다. 절대로 Visual Basic 프로그래머는 v-table 함께 직접 처리해야 합니다. 하지만 이 구조가 어떻게 모든 COM 개체에 바인딩된 및 이를 사용하여 어떤 바인딩이 이해하는 데 익숙한 중요합니다.

초기 바인딩

위의 예제에서는 어떤 초기에 알려진 또는 v-table 바인딩하는 것입니다. IUnknown 인터페이스는 COM 개체를 호출할 때마다 모든 COM 개체에 대해 이 형식의 바인딩 데 걸리는 놓습니다. 있지만 개체의 다른 함수를 어떻습니까? 어떻게 Refresh 메서드를 또는 Parent 속성을 호출할 작업을? 일반적으로 개체에 고유한 사용자 정의 함수입니다. 어떻게 자신의 위치에서 v-table 간주할 수 없는 경우 이를 호출하는 데 필요한 함수 주소를 찾을 수 있습니까?

물론, 응답, 여부를 미리 개체의 v-table 모양을 알고 따라 달라집니다. 그럴 경우 해당 IUnknown 메서드 했던 것처럼 개체의 사용자 지정 메서드 같은 초기 바인딩 프로세스를 수행할 수 있습니다. 어떤 일반적으로 "초기 바인딩에 의해." 지정해야 합니다.

개체에 대한 초기 바인딩을 사용하려면 해당 v-table 모양을 알아야 합니다. Visual Basic 개체, 해당 인터페이스 (v-table) 및 개체에 대해 호출할 수 있는 모든 기능을 설명하는 형식 라이브러리에 대한 참조를 추가하여 이렇게 할 수 있습니다. 해당 작업이 완료되면 것으로 특정 형식의 개체를 선언한 다음 설정하고 있습니다 v-table 사용하여 해당 개체를 사용합니다. 예를 들어, 자동화하는 Microsoft Office 초기 바인딩을 사용하여 Excel에서 원하는 경우 것입니다 "Microsoft Excel 8.0 개체 라이브러리에" Project|References 대화 참조를 추가하고 것으로 "Excel.Application" 형식의 변수를 선언합니다 그런 다음 개체 변수에 모든 호출을 조기에 바인딩될 수 있습니다:
' Set reference to 'Microsoft Excel 8.0 Object Library' in
' the Project|References dialog (or Tools|References for VB4 or VBA).

' Declare the object as an early-bound object
  Dim oExcel As Excel.Application

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via the v-table
  oExcel.Visible = True
				
훌륭한 대부분의 경우, 이 방법을 사용할 수 있지만 디자인 타임에 사용하는 경우 정확한 사용하면 개체 모르는? 예를 들어, 여러 버전의 Excel 수 또는 "알 수 없음" 개체에 완전히 대화할 수 없으면 어떻게 합니까?

런타임에 바인딩

COM IDispatch가 포함됩니다. IDispatch 구현하는 개체는 dispinterface 지원하는 유일한 인터페이스가 있는 경우) 또는 이중 인터페이스를 가지는 것으로 간주됩니다 (또한 초기에 수 있는 사용자 지정 인터페이스를 가질 경우 바인딩). 정확한 속성 또는 메서드 호출 중인 찾아 IDispatch 메서드를 사용하여 런타임에 결정되므로 바인딩할 수 IDispatch 클라이언트가 "런타임에 바인딩될" 있다고 말합니다. 이전 책 예제에서는 돌아가서, 이것을 "해당 텍스트가 이미 인쇄된 대신"시간 읽을 페이지 번호에서 위로"보기" 하는 있는 내용 테이블에 지시하는 각주를 같은 것으로 생각하십시오.

인터페이스의 마법 두 함수에 의해 제어되는: GetIDsOfNames 및 호출. 첫 번째 맵은 함수 (문자열) 함수를 나타내는 (한 멤버에서 dispid 값을) 식별자에 이름을 지정합니다. 호출할 함수의 ID를 알고 나면 Invoke 함수를 사용하여 호출할 수 있습니다. 이 형식의 메서드 호출 "후기 바인딩" 이라고

다시 VBA 개체 선언에 의해 개체가 바인딩되는 방법을 지정하는 방법은 있습니다. "개체" 개체 변수로 선언한 경우, 사실 Visual Basic IDispatch를 사용하도록 알려 주는 및 중인 따라서 런타임에 바인딩:
' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can 
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True
				
볼 수 있는 것처럼 나머지 코드 부분은 동일합니다. 초기 바인딩 및 런타임에 바인딩 작성할 코드) 측면에서 간의 유일한 차이점은 변수 선언에서 것입니다.

참고 어떤 "런타임에 바인딩되는" 함수가 호출될 수 및 않습니다 라고 합니다. 일반적으로 바인딩에 대한 의 이전 토론, 것을 합니다 해당 IDispatch 자체가 "이른 바인딩:" 하는 경우 대상 가정해 해당 VBA COM 호출 마찬가지로 (IDispatch::Invoke) v-table 항목을 통해 Visible 속성을 설정하려면 전화를 겁니다. COM 개체를 Excel 볼 수 있도록 올바른 함수 호출 전달 담당합니다. 이 간접 참조 (즉, 유효한 함수 주소가 바인딩된 컴파일할 Visual Basic 클라이언트가 있습니다 있지만 여전히 작업을 실제로 수행하는 정확한 함수 알 수 없습니다.

멤버에서 dispid 값 바인딩

가능한 가장 늦은 바인딩 하이브리드 양식 (가장 현저하게 MFC Visual Basic 3.0 있지만 Visual Basic 5.0 및 6.0에서 ActiveX 컨트롤에 영향을) 클라이언트가 사용하는 일부 자동화 멤버에서 dispid 값을 바인딩). 디자인 타임에 알려진 COM 개체로 경우 호출되는 함수의 dispids 캐시된 및 IDispatch::Invoke GetIDsOfNames 런타임에 호출할 필요 없이 직접 전달할 수 있습니다. 두 개의 COM 함수 당 호출하는 대신, 사용자가 경우에만 하나를 만들어야 하기 때문에 크게 성능을 높일 수 있습니다.

멤버에서 dispid 값을 바인딩 일반적으로 Visual Basic 5.0 또는 6 .0에서 선택할 수 있는 옵션이 아닙니다. 형식 라이브러리에서 참조되는 사용자 지정 인터페이스를 포함하지 않는 개체에 대한 사용됩니다 (즉, dispinterface 경우에만 개체를) 및 ActiveX 컨트롤에 대한 집계 하지만, 일반적으로 Visual Basic 멤버에서 dispid 값을 바인딩 정상적으로 사용하면 적절한 초기 바인딩을 사용합니다.

바인딩 중 어떤 양식을 사용해야 합니까?

이 질문에 대한 대답은 많은 다른 파일로 프로젝트에 디자인에 따라 달라집니다. 거의 모든 경우에 초기 바인딩을 사용하는 것이 좋습니다. 그러나 런타임에 바인딩을 선택하면 이유가 있을 수 있습니다.

초기 바인딩을 기본 설정 메서드입니다. 응용 프로그램에서 호출되는 함수의 주소를 직접 바인딩합니다 가 추가 오버헤드가 런타임 조회 하면 때문에 최상의 performer 있습니다. 전체 실행 속도는 측면에서 최소한 두 번 빨리 같이 후기 바인딩을 것입니다.

또한 초기 바인딩을 형식 안전성을 제공합니다. Visual Basic 설정할 구성 요소의 형식 라이브러리에 대한 참조가 있는 경우 각 함수를 제대로 코드 수 있도록 IntelliSense 지원을 제공합니다. Visual Basic 또한 사용자가 매개 변수 데이터 형식 또는 반환 값을 저장하는 데 많은 시간 작성 및 코드를 디버깅할 때 올바르지 않으면 경고합니다.

여전히 후기 바인딩 개체의 정확한 인터페이스 디자인 타임에 알 수 없는 경우에 유용합니다. 응용 프로그램의 여러 알 수 없는 서버 대화하려면 추구하는 또는 Visual Basic 6.0 CallByName 함수를 사용하여 이름을 사용하여 함수를 호출하려면 다음 런타임에 바인딩을 사용해야 할 경우 필요한 경우. 런타임에 바인딩을 또한 잘못 수정한 있거나 해당 인터페이스 버전 간의 자동 구성 요소의 여러 버전 간의 호환성 문제를 해결하는 데 유용합니다.

초기 바인딩을 주어진 장점을 가장 좋은 가능하면 확인합니다.

여러 버전 간에 호환성 유지

설치 패키지를 사용하여 재배포할 수행할 및 사용자가 함께 실행 시 구성 요소 또는 일부 경우에서 모든 버전과 호환되는 인터페이스로 초기 바인딩 특별한 주의를 기울여야 합니다 통신할 정확한 버전의 보장할 수 없는 구성 요소를 사용하는 경우 특정 버전에서 존재하고 해당 메서드는 클라이언트 시스템에 설치된 버전 에서 없는 경우 정상적으로 실패할 수 있는 메서드를 호출하려면 후기 바인딩을 사용하십시오.

Microsoft Office 응용 프로그램은 이러한 COM 서버는 좋은 예는 제공합니다. Office 응용 프로그램은 일반적으로 새 기능 또는 버전 간의 올바른 이전 단점을 추가하려면 해당 인터페이스가 확장됩니다. Office 응용 프로그램을 자동화하는 할 경우 초기에 사용자의 클라이언트 시스템에 설치할 수 기대하는 제품 중에서 가장 이전 버전에 바인딩할 것이 좋습니다. 예를 들어, Excel 95, Excel 97, Excel 2000 및 Excel 2002 자동화할 수 있어야 하는 경우 Excel 95 (XL5en32.olb) 형식 라이브러리의 모든 세 버전과의 호환성을 유지할 수 있습니다.

Office 응용 프로그램은 큰 이중 인터페이스 사용하면 개체 모델의 일부 플랫폼에서는 마샬링 있는 제한 떨어질 수 있습니다 보여 줍니다. 코드의 모든 플랫폼에서 가장 잘 작동하도록 IDispatch를 사용하십시오. Office에서 작업할 때 호환성 유지 관리하는 방법에 대한 자세한 내용은 응용 프로그램, Microsoft 기술 자료의 다음 문서를 참조하십시오.
247579가능하면 항상 Office 응용 프로그램을 자동화하는 DISPID 바인딩을 사용하십시오.

참조

자세한 내용은 COM v-테이블 및 자동화를 사용하여 다음 서적을 참조하십시오.
Rogerson, Dale, COM 안쪽, MSPRESS, ISBN: 1-57231-349-8.

Curland, Matt, Visual Basic 6 고급 DevelopMentor 0201707128.

속성

기술 자료: 245115 - 마지막 검토: 2007년 5월 11일 금요일 - 수정: 7.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Office Ultimate 2007
  • Microsoft Office Enterprise 2007
  • Microsoft Office Professional 2007
  • Microsoft Office Professional Plus 2007
  • Microsoft Office Standard 2007
  • Microsoft Office Home and Student 2007
  • Microsoft Office Basic 2007
  • Microsoft Office 2003, All Editions
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
키워드:?
kbmt kbautomation kbinfo KB245115 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com