1. DLL? ¶
κΈ°μ‘΄μ C/C++ νλ‘κ·Έλμμλ λΌμ΄λΈλ¬λ¦¬λ₯Ό LIBλΌλ νμ₯μλ₯Ό κ°μ§ ννλ‘ μ 곡νμ¬ μ½λλ₯Ό μ»΄νμΌνν λ§μ»€κ° νλ‘κ·Έλ¨μ νμν λΆλΆμ λΌμ΄λΈλ¬λ¦¬ νμΌμμ μΆμΆν΄μ λ§λ€μ΄μ§ νλ‘κ·Έλ¨μ λΆμ¬λ£λ λ°©μμΌλ‘ λ§λ€μ΄μ‘λ€. μ΄λ° κ΅¬μ‘°κ° μλμ° νλ‘κ·Έλ¨μΌλ‘ μ€λ©΄μ, λ°λμ΄μΌνλλ°..
μ’ μ μ λ°©μμ²λΌ μ μ μΌλ‘ λ§ν¬λ₯Ό νκ²λλ©΄ μλμ° νλ‘κ·Έλ¨μ νΉμ±μ κ΅μ₯ν λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ°¨μ§νλ νλ‘κ·Έλ¨μ΄ λμμ μ€νμ΄ λλ©΄μ μΈλ°μμ΄ λμΌν μ½λμμμ΄ μ€λ³΅μ μΌλ‘ λ©λͺ¨λ¦¬ 곡κ°μμ μ°¨μ§νκ² λλ νμμ΄ λ°μνμλ€. μ¬κΈ°μ μ°©μνμ¬ μ겨λ κ²μ΄ DLLμ΄λ€. μ΄λ μ€μ νλ‘κ·Έλ¨μ μνλΆλΆμ νκ°λ‘ λκ³ μ μ¬λ¬κ°μ νλ‘κ·Έλ¨μμ κ·Έ λΆλΆμ 곡μ νμ¬ μ¬μ©νλ κ²μ΄λ€.
μ’ μ μ λ°©μμ²λΌ μ μ μΌλ‘ λ§ν¬λ₯Ό νκ²λλ©΄ μλμ° νλ‘κ·Έλ¨μ νΉμ±μ κ΅μ₯ν λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ°¨μ§νλ νλ‘κ·Έλ¨μ΄ λμμ μ€νμ΄ λλ©΄μ μΈλ°μμ΄ λμΌν μ½λμμμ΄ μ€λ³΅μ μΌλ‘ λ©λͺ¨λ¦¬ 곡κ°μμ μ°¨μ§νκ² λλ νμμ΄ λ°μνμλ€. μ¬κΈ°μ μ°©μνμ¬ μ겨λ κ²μ΄ DLLμ΄λ€. μ΄λ μ€μ νλ‘κ·Έλ¨μ μνλΆλΆμ νκ°λ‘ λκ³ μ μ¬λ¬κ°μ νλ‘κ·Έλ¨μμ κ·Έ λΆλΆμ 곡μ νμ¬ μ¬μ©νλ κ²μ΄λ€.
2. μλλ°©μ ¶
νμ₯μκ° λ°λμ DLLμ΄μ΄μΌ νλ κ²μ μλμ§λ§, DLL μ΄ μλκ²½μ°μλ νλ‘κ·Έλλ¨Έκ° μ΄λ₯Ό λ‘λνλ λΆλΆμ λ°λ‘ λ§λ€μ΄μΌ νλ€. .vbx .ocxκ°μ κ²μ νΉμ ν μ’
λ₯μ 컨νΈλ‘€λ€μ ν¬ν¨νλ DLL λ€μ΄λ€.
Win32APIμμλ DLLμ ν΅ν΄μ ꡬνμ΄ λμ΄μλ€.
Library.DLLμ 3κ°μ νλ‘κ·Έλ¨ A,B,Cκ° λμμ 곡μ νλ€κ³ νλ©΄ κ°κ°μ νλ‘κ·Έλ¨μ΄ μ€νλ λλ§λ€ κ° νλ‘κ·Έλ¨μμλ DLLνμΌμ ν¨μλ‘μ λ§ν¬κ° μΌμ΄λλ€. μ΄λ° κ³Όμ μ μλμ° μ΄μ체μ μ μν΄μ μλμΌλ‘ μ΄λ£¨μ΄μ§κ³ , νκ°μ νλ‘κ·Έλ¨μ΄λΌλ μ€νμ΄ μ’
λ£λμ§ μμΌλ©΄ μλμ°λ DLLμ λ©λͺ¨λ¦¬μμ μ κ±°νμ§ μκ³ λ¨κ²¨μ€λ€.
λ¨μ μ DLL νμΌμ΄ λ³κ²½μ΄ λμμλ μ¬λ°λ₯Έ λμμ 보μ₯νκΈ° νλ€λ€λ μ μ λ€ μ μλ€.
3. Runtime Dynamic Linking ¶
early binding, load-time dynamic linking
νλ‘κ·Έλ¨κ³Ό DLLμ΄ λ©λͺ¨λ¦¬ μμΌλ‘ λ‘λλμλ§μ μ¬μ©λλ ν¨μλ€μ λν λ§ν¬κ° μ±λ¦½λλ€.
runtime dynamic linkingνλ‘κ·Έλ¨μ΄ λ¨Όμ μ€νλλ° DLLμ νλ‘κ·Έλ¨μ μμ²μ΄ λ°μν μμ μμ λ©λͺ¨λ¦¬μ λ‘λλλ€. κ·Έλκ° λμμΌ νλ‘κ·Έλ¨μ DLLλ‘λΆν° ν¨μμ μ΄λλ μ€λ₯Ό μ»κ³ κ·Έκ²μ μ¬μ©ν΄μ ν¨μλ₯Ό νΈμΆνλ€.
νλ‘κ·Έλ¨μμ νμν λ©λͺ¨λ¦¬μ μμ μ΅λν μ€μ΄λ κ²μ΄ κ°λ₯νλ€.
κ΄λ ¨ν¨μ) LoadLibrary(), GetProcAddress(), FreeLibrary()
runtime dynmaic linking μ μ€μν μ μ, λ°νμ μμμ ν΄λΉ λͺ¨λμ κ΅μ²΄ν μ μλ€λ μ μ΄λ€. winamp μ λ KMP λ±μ κ°μ νλ¬κ·ΈμΈμ μ 곡ν΄μ£Όλ νλ‘κ·Έλ¨μ κ²½μ° λλΆλΆ μ΄λ¬ν runtime-dynamic linking λ°©λ²μ μ΄μ©νλ€.νλ‘κ·Έλ¨μμ νμν λ©λͺ¨λ¦¬μ μμ μ΅λν μ€μ΄λ κ²μ΄ κ°λ₯νλ€.
κ΄λ ¨ν¨μ) LoadLibrary(), GetProcAddress(), FreeLibrary()
4. DLLμ λ΄μ© ¶
DLLμ ν¨μμ λν μ½λλ§μ μ μ₯λλ° κ΅νλλ κ²μ΄ μλλ€. λΉνΈλ§΅, ν°νΈμ κ°μ 리μμ€λ€μ DLL μμ μμΉμν¬ μλ μλ€. μλ₯Ό λ€μλ©΄ μΉ΄λλμ΄μ μ¬μ©λλ Cards.dll μμ μΉ΄λλ€μ λν λΉνΈλ§΅ μ΄λ―Έμ§μ κ·Έ κ²λ€μ λ€λ£¨λλ° νμν ν¨μλ€μ ν¬ν¨νκ³ μλ€.
6. DLL μμμ λ©λͺ¨λ¦¬ ¶
DLL μμ λμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό μμ±νλ κ²½μ°, ν΄λΉ DLL μ μ΄μ©νλ νλ‘μΈμ€μ νμ ν΄λΉ λ©λͺ¨λ¦¬ 곡κ°μ΄ μ‘νκ² λλ€. DLL μ΄ νλλ§ μ¬λΌκ°λ€κ³ λ©λͺ¨λ¦¬κ° 곡μ λμ§ μλλ€.
λ§μΌ νλ‘μΈμ€-global ν λ©λͺ¨λ¦¬λ₯Ό μ°κ³ μΆλ€λ©΄, λ©λͺ¨λ¦¬ λ§΅μ μ΄μ©νκ±°λ DLL 곡μ μμμ μ μΈνλ λ°©λ² λ±μ μ¨μΌ νλ€.