오브젝트 링크 및 삽입

Object Linking and Embedding

OLE(Object Linking & Embedding)는 문서 및 기타 오브젝트에 대한 임베디드 및 링크를 가능하게 하는 Microsoft독자 기술입니다.개발자를 위해 사용자 정의 사용자 인터페이스 요소를 개발하고 사용하는 방법인 OLE 제어 확장(OCX)을 제공했습니다.기술적 수준에서 OLE 개체는 다음 기능을 구현하는 개체입니다.IOleObject오브젝트의 요구에 따라서는, 다른 광범위한 인터페이스와 함께 사용할 수 있습니다.

개요

OLE를 사용하면 편집 응용프로그램이 문서의 일부를 다른 편집 응용프로그램으로 내보낸 후 추가 내용과 함께 가져올 수 있습니다.예를 들어 데스크톱 게시 시스템은 OLE를 사용하여 워드 프로세서에 일부 텍스트를 보내거나 비트맵 편집기에 그림을 보낼 수 있습니다.OLE의 주요 장점은 텍스트 편집기 및 이미지 편집기와 같은 다른 응용프로그램의 문서에 다른 종류의 데이터를 추가할 수 있다는 것입니다.이렇게 하면 복합 파일 이진 형식 문서와 문서가 참조하는 마스터 파일이 작성됩니다.마스터 파일의 데이터를 변경하면 해당 파일을 참조하는 문서에 즉시 영향을 미칩니다.이것을 「임베디드」가 아닌 「링크」라고 부릅니다.

또한 OLE는 끌어서 놓기와 클립보드 작업을 사용하여 서로 다른 응용 프로그램 간에 데이터를 전송하는 데도 사용됩니다.

역사

OLE 1.0

1990년에 출시된 OLE 1.0은 마이크로소프트가 이전 버전의 윈도우즈용으로 개발한 DDE(Dynamic Data Exchange) 개념의 진화입니다.DDE는 실행 중인 두 개의 응용프로그램 간에 제한된 양의 데이터를 전송하는 데 그쳤지만, OLE는 두 문서 간의 활성 연결을 유지하거나 다른 문서 유형에 한 개의 문서를 포함시킬 도 있었습니다.

OLE 서버 및 클라이언트는 가상 함수 테이블(VTBL)을 사용하여 시스템 라이브러리와 통신합니다.VTBL은 시스템라이브러리가 서버 또는 클라이언트와의 통신에 사용할 수 있는 함수 포인터의 구조로 구성됩니다.서버 및 클라이언트 라이브러리,OLESVR.DLL 및 OLECLI.DLL은 원래 WM_DDE_EXECUTE 메시지를 사용하여 서로 통신하도록 설계되었습니다.

OLE 1.0은 나중에 COM(Component Object Model)로 알려진 소프트웨어 컴포넌트의 아키텍처로 발전했고 나중에는 DCOM으로 알려졌습니다.

OLE 개체를 클립보드에 배치하거나 문서에 포함하면 기본 Windows 형식(: 비트맵 또는 메타파일)의 시각적 표현과 기본 데이터가 모두 고유한 형식으로 저장됩니다.이렇게 하면 오브젝트를 작성하는 데 사용한 어플리케이션을 로드하지 않고 오브젝트를 표시할 수 있습니다.또한 적절한 어플리케이션이 설치되어 있는 경우 오브젝트를 편집할 수도 있습니다.

OLE의 구성 요소인 Object Packager는 Windows 3.1에서 Windows XP로 출하되며 OLE가 아닌 개체를 "패키지"하여 OLE 클라이언트에 포함할 수 있습니다.

OLE 2.0

OLE 2.0은 버전 1.0과 동일한 목표를 공유하는 OLE의 차세대 버전이었지만 VTBL을 직접 사용하는 대신 COM 위에 다시 구현되었습니다.새로운 기능으로는 OLE 자동화, 드래그 앤 드롭, 인플레이스 활성화구조화된 스토리지가 있습니다.모니커는 OLE 1 객체 이름에서 발전하여 독립적으로 발명된 URL 또는 URI와 유사한 계층적 객체 및 리소스 명명 시스템을 제공했습니다.Windows 에서는, URL 모니커 타입과 모니커 URL 스킴을 서포트하는 2개의 테크놀로지를 통합했습니다.

OLE 사용자 정의 컨트롤

OLE 사용자 정의 컨트롤은 현재 사용되지 않는 Visual Basic Extension 컨트롤을 대체하기 위해 1994년에 도입되었습니다.이러한 업그레이드 대신 새로운 아키텍처는 OLE를 기반으로 했습니다.특히 OLE 2.0을 지원하는 컨테이너는 이미 OLE 사용자 정의 컨트롤을 포함할 수 있지만 컨테이너가 이를 지원하지 않는 한 이러한 컨트롤은 이벤트에 반응할 수 없습니다.OLE 사용자 정의 컨트롤은 일반적으로 확장자가 .ocx인 동적 링크 라이브러리의 형태로 제공됩니다.1996년 컨트롤용 모든 인터페이스(IUnknown 제외)는 컨트롤의 파일 크기를 낮게 유지하도록 옵션화되었습니다.이러한 인터페이스는 ActiveX 컨트롤이라고 불렸습니다.

기술적 세부사항

OLE 개체 및 컨테이너는 Component Object Model 에 구현됩니다. 이러한 개체는 기능을 내보내기 위해 인터페이스를 구현할 수 있습니다.IOleObject 인터페이스만 필수이지만, 이러한 인터페이스에서 내보내는 기능이 필요한 경우 다른 인터페이스도 구현해야 할 수 있습니다.

다음 내용을 쉽게 이해하려면 몇 가지 용어를 설명해야 합니다.객체의 뷰 상태는 객체가 투명, 불투명 또는 솔리드 배경으로 불투명한지 여부와 지정된 측면의 도면을 지원하는지 여부입니다.개체의 사이트는 컨테이너에 있는 개체의 위치를 나타내는 개체입니다.컨테이너는 포함된 모든 개체에 대해 사이트 개체를 지원합니다.

다음에 나타내는 것은, 통상, 실장할 필요가 있는 오브젝트 마다 그룹화된 인터페이스의 리스트입니다.일반적으로 OLE 개체에 의해 구현되는 인터페이스는 일반적으로 OLE 컨테이너에 의해 호출되며, 그 반대도 마찬가지입니다.다음 목록에서 들여쓰기는 인터페이스 상속을 나타냅니다.모든 비인텐트인터페이스는 IUnknown에서 파생됩니다.

OLE 오브젝트

데이터 객체
구현 시 데이터 전송 및 데이터 변경 알림이 가능합니다.끌어서 놓기, 클립보드에 복사 또는 붙여넣기, 또는 포함된 문서에 연결되거나 포함된 개체에 의해 구현되어야 합니다.
Object With Site(Object With Site)
호출자가 OLE 개체에 사이트를 알릴 수 있습니다.이 기능은 OleObject에서도 제공되지만 OleObject가 다른 문제에 사용되지 않는 경우 ObjectWithSite를 지원할 수 있습니다.
올레캐시
DataObject의 시각적 프레젠테이션을 캐시할 수 있습니다.이렇게 하면 내장된 객체가 시각적 표현을 저장할 수 있으므로 객체를 만드는 데 사용된 애플리케이션을 시작할 필요 없이 나중에 표시할 수 있습니다.
보통 재고 실장이 사용됩니다.
OleCache2
캐시를 보다 세밀하게 제어할 수 있습니다.
보통 재고 실장이 사용됩니다.
OleCacheControl
인터페이스는 컨테이너에 의해 호출되는 것이 아니라 내부에서 객체에 의해 호출되어 DataObject가 실행 중일 때 알림을 수신할 수 있습니다.이것에 의해, 이 인터페이스는 해당 객체의 데이터 변경 알림에 서브스크라이브 할 수 있게 되어 캐시된 프레젠테이션을 적절히 프레젠테이션을 갱신할 수 있게 됩니다.
보통 재고 실장이 사용됩니다.
OleDocument
OLE 개체는 데이터의 여러 보기와 몇 가지 관련 기능을 지원할 수 있습니다.
OleDocumentView
문서 오브젝트(OleDocument를 구현하는 오브젝트)는 모든 보기에 대해 이 인터페이스를 구현합니다.이것에 의해, 발신자는 오브젝트의 사이트를 설정해, 오브젝트의 사이즈를 조회해 설정할 수 있습니다.또, 관련하는 기능의 표시와 액티베이션도 가능합니다.
올레 윈도
OleInPlaceActiveObject
객체의 가장 바깥쪽 컨테이너에서 객체와 상호 작용하기 위해 호출됩니다(예: 컨테이너의 메시지 대기열에서 포함된 객체에 대한 가속기 키를 처리하기 위해).
OleInPlaceObject
개체를 활성화하거나 비활성화하기 위해 컨테이너에서 호출됩니다.
IOleInPlaceObjectWindowless
창 없는 개체는 자체 창이 없는 개체로 대신 컨테이너의 창에 표시됩니다.컨테이너가 컨테이너 창에서 받은 메시지를 포함된 개체에 대한 메시지를 릴레이하는 데 사용됩니다.예를 들어 마우스를 창 위로 이동하면 Windows는 마우스 좌표와 함께 마우스 이동 메시지를 창의 메시지 큐에 배치합니다.이 창에 창이 없는 삽입 객체가 포함되어 있는 경우 마우스 포인터의 좌표가 이 객체 위에 있으면 메시지를 해당 객체로 릴레이해야 할 수 있습니다.비슷한 이유로 이 인터페이스는 개체의 DropTarget 인터페이스에 대한 액세스도 제공합니다.
OleLink
컨테이너가 링크된 객체의 소스를 설정하도록 허용함으로써 객체가 링크를 지원할 수 있습니다.
보통 재고 실장이 사용됩니다.
Ole Object(Ole Object)
거의 틀림없이 OLE 오브젝트에 가장 중요한 인터페이스입니다.예를 들어, 컨테이너는 자신의 사이트에 대한 정보를 객체에 전달하고, 데이터에서 객체를 초기화하며, 객체를 열고 닫고, 객체의 크기를 쿼리하고, 컨테이너의 AdvisorySink에 알림을 요청하고, 객체에 대해 "부사"로 정의된 객체를 실행할 수 있습니다.이러한 동사에는 종종 "열기" 또는 "편집"이 포함되지만 다른 동사도 포함될 수 있습니다.동사 중 하나는 주동사로 정의되어 사용자가 오브젝트를 더블클릭할 때 실행된다.
View Object(ViewObject)
컨테이너에 DataObject를 전달하지 않고 개체가 직접 그릴 수 있습니다.DataObject와 이 인터페이스를 모두 지원하는 개체의 경우 일반적으로 기본 구현이 공유됩니다.
View Object 2
게다가 발신자가 오브젝트의 사이즈를 문의할 수 있도록 합니다.
View Object Ex
투명 객체의 깜박임이 없는 그리기, 불규칙한 모양의 객체에 대한 적중 테스트 및 객체의 크기 설정을 지원합니다.

OLE 컨테이너

IAdvise 싱크
개체가 저장되거나 닫히거나 이름이 변경될 때 또는 해당 데이터 또는 시각적 표시가 변경될 때 구현자가 알림을 받을 수 있습니다.
IAdvise Sink 2
또한 OLE 개체의 링크 원본이 변경될 때 구현자가 통지를 받을 수 있습니다.
IAdvise SinkEx
또한 OLE 개체의 보기 상태가 변경될 때 구현자가 통지를 받을 수 있습니다.
IOle Client 사이트
이 인터페이스를 통해 발신자는 객체의 컨테이너 및 위치에 대한 정보를 얻을 수 있으며 객체의 저장, 크기 조정, 표시, 숨김 등을 요구할 수 있습니다.
IOle Document 사이트
발신자가 이 사이트의 오브젝트를 즉시 활성화하도록 요구할 수 있습니다.이 인터페이스를 실장하는 경우는 IOleClientSite, IOleInPlaceSiteIAdviseSink도 실장해야 합니다.
IOle Container
이 인터페이스를 통해 발신자는 컨테이너에 포함된 개체를 열거하거나 이름으로 해당 개체를 검색할 수 있습니다.컨테이너가 내장된 객체에 대한 링크를 지원하려는 경우 주로 유용합니다.
IOle 창
IOleInPlaceUI 윈도
포함된 개체가 컨테이너 창의 도구 모음에 대한 공간을 협상할 수 있도록 합니다.
IOleInPlaceFrame(IOleInPlace프레임)
발신자가 컨테이너에 메뉴 항목을 빈 메뉴에 삽입하도록 요청할 수 있습니다. 이 메뉴는 공동 메뉴가 됩니다.또한 발신자는 컨테이너에 이 메뉴의 표시 또는 숨기기, 대화상자의 표시 또는 숨기기, 컨테이너를 대상으로 하는 포함된 객체가 수신한 액셀러레이터 키의 처리를 요구할 수 있습니다.
IOleInPlace 사이트
컨테이너가 이 인터페이스를 구현하면 별도의 창에서 열지 않고 삽입형 객체를 제 위치에서 활성화할 수 있습니다.컨테이너의 IOleInPlace에 대한 액세스를 제공합니다.UI 윈도
IOleInPlaceSiteEx
컨테이너가 이 인터페이스를 구현하면 내장형 객체가 활성화 또는 비활성화 시 다시 그릴 필요가 있는지 확인할 수 있습니다.또한 UI를 활성화하도록 요청할 수 있습니다.
IOleInPlaceSiteWindowless
컨테이너가 창 없는 임베디드 객체를 지원하려면 임베디드 객체에 기능을 제공하여 임베디드 객체의 창에서 일반적으로 제공되는 기능을 대체해야 합니다.예를 들어, 이 인터페이스는 컨테이너 창의 장치 컨텍스트에 액세스하여 컨테이너 창에 내장된 개체를 그릴 수 있는 방법을 제공합니다.
IOLEILINK 컨테이너
연결된 개체를 관리하는 표준 OLE 대화 상자에서 컨테이너의 연결된 개체를 업데이트하거나 원본 조회 및 변경에 사용하는 메서드를 포함합니다."링크", "소스 변경", "링크 업데이트" 및 "개체 특성" 대화상자에서 사용됩니다.
IOLEILink Info
또한 연결된 개체가 마지막으로 업데이트된 시기와 이 작업이 자동으로 수행되었는지 또는 수동으로 수행되었는지 쿼리할 수 있습니다.
IOLEIObjInfo
"개체 특성" 대화상자에 필요한 메서드가 포함되어 있습니다.예를 들어, 사용자가 "개체 특성" 대화상자를 열고 개체를 다른 유형으로 변환하도록 요청하면 이 인터페이스의 메서드가 호출됩니다.
IOleUndoManager
컨테이너 자체와 내장된 개체 모두에 중앙 집중식 실행 취소 서비스를 제공합니다.실행 취소 가능한 작업이 수행되면 IOleUndoUnit이 생성되어 IOleUndoManager에 추가됩니다.

다른.

IData 어드바이저 홀더
데이터 변경 알림과 관련된 IDataObject 메서드는 이 인터페이스의 메서드를 호출하여 구현할 수 있습니다.
보통 재고 실장이 사용됩니다.
IOle 어드바이저 홀더
알림과 관련된 IOleObject 메서드는 이 인터페이스의 메서드를 호출하여 구현할 수 있습니다.
보통 재고 실장이 사용됩니다.
IDrop 소스
끌어서 놓기 작업의 소스가 될 수 있는 개체로 구현됩니다.이 기능을 구현하면 개체가 끌어서 놓기 효과를 그리거나 개체를 놓을 시기를 지정하거나 끌어서 놓기 작업을 취소할 수 있습니다.
IDrop Target(IDrop 타깃)
드롭된 객체를 받아들이는 객체(드래그 앤 드롭 조작의 대상이 될 수 있음)에 의해 구현됩니다.이 기능을 구현하면 타깃은 드롭된 오브젝트를 받아들일지 여부와 드롭된 오브젝트에 대한 처리를 지정할 수 있습니다.
IOle Command Target(IOle 명령어 타깃)
특정 표준 명령을 지원하려는 개체(OLE 개체, OLE 컨테이너 및 기타 개체)에 의해 구현될 수 있습니다.이를 통해 발신자는 명령어가 지원되는지 여부를 조회하고 명령을 실행할 수 있습니다.오브젝트가 일반적으로 구현하고자 하는 명령어에는 "삭제", "컷", "복사", "붙여넣기", "실행 취소", "검색", "인쇄", "저장", "줌" 등이 있습니다.현재 58개의 표준 명령어가 정의되어 있으며 사무실 소프트웨어, 웹 브라우저 및 유사한 응용 프로그램에서 일반적으로 사용되는 명령어가 포함되어 있습니다.
IOleUndoUnit
취소할 수 있는 액션을 나타냅니다.여기에는 작업을 실행 취소하는 데 필요한 모든 정보가 포함되어 있습니다.실행 취소 가능한 작업을 컨테이너의 IOleUndoManager에 추가할 수 있도록 개체 및 컨테이너에 의해 생성됩니다.
IOleParentUndoUnit
실행 취소 유닛에 다른 실행 취소 유닛을 포함할 수 있습니다.기본적으로 실행 취소 유닛을 실행 취소 스택으로 작동시켜 실행 취소 유닛을 그룹화할 수 있습니다.예를 들어 매크로가 실행되는 경우 매크로에 의해 실행되는 모든 실행 취소 가능한 액션을 하나의 실행 취소 단위로 그룹화할 수 있습니다.
IOle 창
이 인터페이스는 컨테이너 또는 포함된 개체의 창을 나타냅니다.이것에 의해, 발신자는 윈도우의 핸들을 취득해, 상황 의존 도움말 기능을 전환할 수 있습니다.상황에 맞는 도움말 기능이 켜져 있으면 일반적으로 마우스 포인터가 물음표가 있는 화살표로 바뀌어 사용자 인터페이스 요소를 클릭하면 도움말 창이 열리게 됩니다.

경쟁.

OpenDoc 기술은 OLE와 경쟁하려고 했습니다.마이크로소프트의 경쟁사 중 일부는 OpenDoc이 더 견고하고 사용하기 쉽다고 생각했지만 OpenDoc에는 알려진 문제가 몇 가지 있습니다.OpenDoc은 사용자가 마이크로소프트의 독점 OLE 표준과 경쟁하여 애플리케이션 전체의 정보를 직접 보고 편집할 수 있도록 했습니다.1993년에 마이크로소프트의 일부 경쟁사는 컴포넌트 통합 연구소(CIL)라는 컨소시엄을 설립하여 크로스 플랫폼 링크 및 임베딩을 위한 오픈 표준으로 OpenDoc을 개발했습니다.

Microsoft는 응용 프로그램의 Windows 95와의 호환성에 대한 Microsoft의 인증 조건으로 OLE 호환성을 요구했습니다.Microsoft는 처음에 OpenDoc을 사용하는 애플리케이션이 OLE와 호환되는 것으로 간주되며 Windows 95에 대한 인증을 받을 것이라고 발표했습니다.마이크로소프트는 나중에 결정을 번복하여 OpenDoc을 사용하는 애플리케이션은 인증을 전혀 받지 못할 수 있다고 말했다.마이크로소프트는 경쟁 애플리케이션을 출시할 때까지 사양을 보류하고 OLE 버전을 디버깅했다.

상호 운용성

OLE 개체를 사용하면 Microsoft Windows 이외의 파일을 보거나 편집하기 위한 프로그램(예: 텍스트 문서 또는 프레젠테이션 [1][2][3][4]파일에 스프레드시트 응용 프로그램의 표 또는 차트 포함)에서 이러한 개체가 널리 지원되지 않기 때문에 상호 운용성이 제한됩니다.OLE 개체를 인식하는 소프트웨어를 사용할 수 없는 경우 일반적으로 개체는 그림(개체의 비트맵 표현)으로 대체되거나 [5][6][7]전혀 표시되지 않습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Byfield, Bruce (2005-08-23). "FOSS word processors compared: OOo Writer, AbiWord, and KWord". Linux.com. The Linux Foundation. Retrieved 2020-09-29.
  2. ^ Byfield, Bruce (2005-07-28). "Sharing files between OpenOffice.org and Microsoft Office". Linux.com. The Linux Foundation. Retrieved 2020-09-29.
  3. ^ Sharma, Mayank (2008-11-20). "SoftMaker Office 2008 focuses on compatibility with Microsoft Office". Linux.com. The Linux Foundation. Retrieved 2020-09-29.
  4. ^ Lagadec, Philippe (2006-11-30). "OpenOffice / OpenDocument and Microsoft Office 2007 / Open XML security" (PDF). PacSec 2006 Conference. Retrieved 2020-09-29.
  5. ^ Gong, Rhett (2005-09-05). "RE: OLE object - bitmap representation?". Newsgroup: microsoft.public.win32.programmer.ole. Usenet: iZFkEiesFHA.1204@TK2MSFTNGXA01.phx.gbl. Retrieved 2020-09-29.
  6. ^ O'Neill, Mike (2005-02-09). "A Rich Edit Control That Displays Bitmaps and Other OLE Objects". Code Project. Retrieved 2020-09-29.
  7. ^ "ACC: Why OLE Objects Cause Databases to Grow". Microsoft. 2007-01-19. Archived from the original on 2008-02-15.

외부 링크

  • RIPOLE - OLE 문서에서 첨부 파일을 추출합니다.
  • docs.microsoft.com의 OLE 배경