1. OLE? ¶
μλ‘ λ€λ₯Έ μμ©νλ‘κ·Έλ¨λ€μ΄ νλ‘κ·Έλ¨ μμ μλ λ°μ΄ν°λ₯Ό νΈμ§ν μ μλλ‘ νλ νλ‘λ¨μ μμ±ν μ μλλ‘ νλ λ©μΉ΄λμ¦μ΄λ€. (μλ₯Ό λ€μλ©΄ μ€νΌμ€μ¨μ΄μμ ν¬ν γ
€γ
γ
γ
μμ μμ νλ κ·Έλ¦Όμ νΉμ ν¬λ§·μΌλ‘ λ³ννμ§ μκ³ λ°λ‘ λΆμ΄κΈ° νλ κ²½μ°μ κ°μ κ²½μ°....)
μ΄λ κ² λ€λ₯Έ νλ‘κ·Έλ¨μ΄ μμ μ΄ μ§ νλ‘κ·Έλ¨μμ λ§μΉ μμ μ νλ‘κ·Έλ¨μ λ°μ΄ν°μΈ κ² μ²λΌ λ€λ£¨μ΄μ§μ§λ§, μ¬μ€μ λ€λ₯Έ νλ‘κ·Έλ¨μ΄ κ·Έ λ°μ΄ν°λ₯Ό λ€λ£¨λ κ² μΌ λΏμ΄λ€.
μΈλΆμ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°©μμ 2κ°μ§μ΄λ€.
μΈλΆ κ°μ²΄λ₯Ό νμ¬ νλ‘κ·Έλ¨μ λν λνλ¨ΌνΈμ λΆλΆμΌλ‘μ μ μ₯νμ§ μκ³ , λ€λ₯Έ νλ‘κ·Έλ¨μμμ λ νΌλ°μ€λ‘λ§ μ μ₯μν€λ λ°©μ, λλ²μ§Έλ‘λ λ€λ₯Έ νλ‘κ·Έλ¨μ λνλ¨ΌνΈλ₯Ό μμ μ νλ‘κ·Έλ¨μ μ λ² λ© μμΌμ λ΄λΆμ μμ ν¬ν¨ν΄λ²λ¦¬λ λ°©μ. μ΄λ κ² 2κ°μ§κ° μμ μ μλ€.
μΈλΆ κ°μ²΄λ₯Ό νμ¬ νλ‘κ·Έλ¨μ λν λνλ¨ΌνΈμ λΆλΆμΌλ‘μ μ μ₯νμ§ μκ³ , λ€λ₯Έ νλ‘κ·Έλ¨μμμ λ νΌλ°μ€λ‘λ§ μ μ₯μν€λ λ°©μ, λλ²μ§Έλ‘λ λ€λ₯Έ νλ‘κ·Έλ¨μ λνλ¨ΌνΈλ₯Ό μμ μ νλ‘κ·Έλ¨μ μ λ² λ© μμΌμ λ΄λΆμ μμ ν¬ν¨ν΄λ²λ¦¬λ λ°©μ. μ΄λ κ² 2κ°μ§κ° μμ μ μλ€.
2. 컨ν μ΄λμ μλ² ¶
컨ν
μ΄λ : μλ² λλ κ°μ²΄λ₯Ό μ²λ¦¬ν μ μλ νλ‘κ·Έλ¨μ OLE 컨ν
μ΄λλΌκ³ λΆλ₯Έλ€.
OLEμλ² : μλ²λ 컨ν μ΄λμ λ€μ΄κ° κ°μ²΄λ₯Ό μμ±νλ€. νμλ²λ λ 립μ μΈ νλ‘κ·Έλ¨μΌλ‘ μλν μ μκ±°λ, λ³΅ν© λνλ¨ΌνΈ μμ μλ² λλ κ°μ²΄λ‘ μλνλ€. λ―Έλμλ²λ standalone λͺ¨λλ‘μ μλνμ§ λͺ»νλ€. μ€λ‘μ§ κ°μ²΄λ₯Ό λ§λ€κΈ°λ§ ν λΏμ΄λ€.
OLEμλ² : μλ²λ 컨ν μ΄λμ λ€μ΄κ° κ°μ²΄λ₯Ό μμ±νλ€. νμλ²λ λ 립μ μΈ νλ‘κ·Έλ¨μΌλ‘ μλν μ μκ±°λ, λ³΅ν© λνλ¨ΌνΈ μμ μλ² λλ κ°μ²΄λ‘ μλνλ€. λ―Έλμλ²λ standalone λͺ¨λλ‘μ μλνμ§ λͺ»νλ€. μ€λ‘μ§ κ°μ²΄λ₯Ό λ§λ€κΈ°λ§ ν λΏμ΄λ€.
3. μλνλ λ°©μ ¶
OLE 컨ν
μ΄λ, μλ² μ¬μ΄μ ν΅μ μ μλμ° μ΄μ체μ λ₯Ό λ§€κ°λ‘ λμνλ€. κ° OLE λ₯Ό μ§μνλ νλ‘κ·Έλ¨μ 곡ν΅μ OLE DLLμ κ°μ§λλ° μ΄ κ²μ΄ μλμ°μ κΈ°λ³Έμ§μ λΆλΆμ΄λ€. DLL μμ ν¨μλ€μ μ΄λ κ² κ°μ²΄μ¬μ΄μ ν΅μ μ μ§μνλ€. μ΄λ μ΄λ₯Ό μ§μνλ νμ€μ μΈ μΈν°νμ΄μ€κ° COM(Component Object Model)μ΄λ€. λ³Έμ§μ μΌλ‘ μ λΉλλ κ°μ²΄μ λͺ¨μκ³Ό 컨ν
μ΄λκ° κ·Έκ²κ³Ό ν΅μ νλ λ°©λ²μ μ μνκ²μ΄λ€.
4. OLE COM ¶
OLE μλ²μ κ°μ COMκ°μ²΄λ IUnknown μ΄λΌλ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μλ°.
μ΄μΈμλ λ€λ₯Έ μΈν°νμ΄μ€λ€λ μλ€. μΈν°νμ΄μ€μ μ΄λ¦μ Iλ‘ μμνλ κ²μ΄ μμΉμ΄λ€. λν νλ‘κ·Έλλ¨Έκ° μμ λ§μ 컀μ€ν
μΈν°νμ΄
μ€λ₯Ό λ§λ€μ΄μ μ¬μ©νλ κ²λ κ°λ₯νλ€.
QueryInterface() | νΉμ ν μΈν°νμ΄μ€κ° κ°μ²΄μ μν΄ μ§μλλμ§λ₯Ό κ²μ¬. μ§μλλ€λ©΄ ν¬μΈν°κ° 리ν΄λλ€. |
AddRef() | μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈμ κ°μμ λν μΉ΄μ΄ν°λ₯Ό μ¦κ°μν¨λ€. |
Release() | μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈμ κ°μμ λν μΉ΄μ΄ν°λ₯Ό κ°μμν¨λ€. μΉ΄μ΄ν°κ° 0μ΄λλ©΄ λμ΄μ μ¬μ©λμ§ μμΌλ―λ‘ λ©λͺ¨λ¦¬μμ ν΄μ λ μ μλ€. |
μ€λ₯Ό λ§λ€μ΄μ μ¬μ©νλ κ²λ κ°λ₯νλ€.
5. Registry ¶
OLEμλ²λ₯Ό μ΄λ€ λ°©μμΌλ‘ μλ³ν κ²μΈκ°? OLEκ°μ²΄λ λ¬Έμ, νλ‘κ·Έλ¨λ± OLEλ₯Ό μ§μνλ μ΄λ€ νλ‘κ·Έλ¨λ λ μ μλ€. μμ€ν
μ μλ κ°κ°μ OLEκ°μ²΄λ ν΄λμ€ ID λλ CLSIDλΌκ³ λΆλ₯΄λ 128λΉνΈμ μ«μλ‘ μλ³νλ€. μ΄λ€μ GUIDλΌκ³ λ λΆλ¦¬μ°λ©° μκ³ λ¦¬μ¦μ ν΅ν΄μ μμ±λκΈ° λλ¬Έμ λͺ¨λ λ
νΉν κ°μ μ§λκ²λλ€. μ΄λ¬ν μ 보λ μλμ° μμ€ν
μ λ μ§μ€νΈλ¦¬μ μ μ₯λκ² λλ€.
6.1.1. 컨ν μ΄λμ μλ² λλ κ°μ²΄ ¶
COleClientItem μλ μ λ² λλ νλͺ©μ κ΄λ¦¬λ₯Ό μν΄ μ»¨ν
μ΄λκ° νμλ‘νλ μΈν°νμ΄μ€λ€μ΄ μ‘΄μ¬νλ€.
OnChange() | μλ² λλ κ°μ²΄μ λ³κ²½μ¬νμ΄ μ‘΄μ¬νλ©΄ κ·Έ νλͺ©μ μλ²μ λ³΄κ³ λ λ νλ μμμ μν΄ νΈμΆλλ€. μΌλ°μ μΈ κ²½μ°λ μλ² λλ κ°μ²΄λ₯Ό λ€μ 그릴λμ΄λ€. |
OnGetItemPosition() | OLEκ°μ²΄κ° νμλμ΄μΌ νλ 컨ν μ΄λμ ν΄λΌμ΄μΈνΈ μμμ μ§μ¬κ°νμ μ»κΈ° μν΄ νλ μμμ μν΄ νΈμΆ |
OnChangeItemPosition() | μ λ² λλ κ°μ²΄μ λ²μκ° νΈμ§ μμ λμ λ³κ²½λμλ€λ κ²μ 컨ν μ΄λμ μ리기 μν΄ νλ μμμ μν΄ νΈμΆ |
Serialize() | 컨ν μ΄λ μμ μΆκ°λ κ°μ²΄λ₯Ό μ§λ ¬ν νλλ° νμν¨ |
6.2. μλ²μμ μλ μ λ² λλ κ°μ²΄ ¶
COleServerItem μμμ μλ²λ₯Ό μ§μνλ μΈν°νμ΄μ€λ λ§μ ν¨μλ₯Ό κ°λλ€.
OnDraw() | κ°μ²΄κ° in-place νμ±ν λμμλ μλ²μ μλ λ·°ν΄λμ€μ OnDraw() ν¨μμ μν΄μ κ·Έλ €μ§λ€. λ°λΌμ 컨ν μ΄λμ μλ μμλ₯Ό 그리λ μΌμ μλ²μΈ‘μμ ꡬνλμ΄μΌ νλ κ²μ΄λ€. |
Serialize() | 컨ν μ΄λμ μμ²μ λ°κ³ κ°μ²΄λ₯Ό μ§λ ¬ννλ κ²μ. |
OnGetExtent() | μλ² λλ κ°μ²΄μ μ€μ λ²μλ₯Ό μ»κΈ° μν΄ νλ μμμ μν΄ νΈμΆλλ λΆλΆμ΄λ€. |
NotifyChanged() | μλ²μμ κ°μ²΄κ° λ³κ²½λλ©΄, μ΄ κ°μ²΄λ₯Ό μλ² λ νκ³ μλ λͺ¨λ 컨ν μ΄λμκ² μ΄λ₯Ό μλ € 컨ν μ΄λκ° OnChanged()λ₯Ό νΈμΆνλλ‘ νλ€. |
6.3. OLE λνλ¨ΌνΈ ν΄λμ€ ¶
컨ν
μ΄λμΈ‘μλ COleDocument, COleLinkingDoc μ΄ μ‘΄μ¬νλ€. μ μμ κ²½μ°λ in-place νμ±νλ₯Ό μ§μνλ©°, νμλ λ§ν¬λ°©μμ μ§μνλ€.
μλ²μΈ‘μλ COleServerDocμμ νμλ λνλ¨ΌνΈλ₯Ό μ΄μ©νλ€. μλ²μΈ‘μμλ λ°λμ OnGetEmbeddedItem() λ©€λ²λ₯Ό ꡬνν΄μΌνλ€. μ΄λ μ΄ ν¨μκ° μμκ°μ ν¨μμ΄κΈ° λλ¬Έμ΄λ€.
μλ²μΈ‘μλ COleServerDocμμ νμλ λνλ¨ΌνΈλ₯Ό μ΄μ©νλ€. μλ²μΈ‘μμλ λ°λμ OnGetEmbeddedItem() λ©€λ²λ₯Ό ꡬνν΄μΌνλ€. μ΄λ μ΄ ν¨μκ° μμκ°μ ν¨μμ΄κΈ° λλ¬Έμ΄λ€.