1. Dynamic Linking 은 DLL을 통해서 코드를 패키징 하는 방법이다.

 

2. DLL은 C 스타일 함수를 뱉는 놈이고, 앱에서는 DLL을 자유롭게 선택이 가능하다.

 

3. 앱은 소스코드에 접근하지 않고도, DLL을 통해서 그 함수의 기능을 사용할 수 있다.

 

4. 소스코드의 내용이 길고, 드물게 사용하는 놈들은 다른 DLL에 때려박아서. 쓸데없는 메모리 흔적을 줄일 수 있다.

 

DLL 파일 사용해보기

1. powershell을 켜봐라.

2. notepad로 Library.h, Library.cpp, Library.def 파일을 만들어보아라, notepad++ 보다는 notepad2를 사용하여야 cmd 창에서 사용할 수 있을 것이다. 내용은 아무렇게나 한다.

3. def 파일은 optional 이긴 하지만, 필요한 함수만 EXPORTS 하도록 한다.

//Library.def
EXPORTS

함수이름

4. 3개의 파일을 대충 맹글었으면, 커맨드를 입력한다.

cl /W4 /LD Library.cpp Library.def 

5. W4 는 에러를 출력해주는 아이이고, LD는 링커 어쩌고 하는데 나도 모른다.

6. 성공하면 .dll .exp .lib .obj 파일이 생성된다.

7. dll 파일은 런타임에서 필요한 함수를 EXPORTS 하는 놈이고, lib는 컴파일 타임에서 그 함수를 링커에 연결하는 놈이다.

8. 이제 다른 cpp 파일에서 쓰면 된다.

9. cl /W4 App.cpp /link Library.lib 커맨드를 입력한다. 그러면 exe 파일과 obj 파일이 생성된다.

cl /W4 App.cpp /link Library.lib

10.  exe 파일을 실행하면 하와이에 가지않겠다고 떼쓰는 동수를 볼 수 있다.

11. Dependenct Walker를 사용하면 혹시라도 발생한 오류를 체크할 수 있다.

12. 사실 import export할때 함수 이름만 주의하면 오류가 생길일이 없다.

13. 호출규약을 설정해주지  않았으니, 모호한 호출이 될 수도 있늗데, __cdcl, __stdcall 은 ARM, x64 컴파일러에서는 무시된다고 한다.

14 C#에서도 동수를 하와이에 보낼 수 있다.

15. C# 코드를 작성한다.

//Appcs.cs
using System.Runtime.InteropServices;

class Application
{
  static void Main()
  {
    Dongsu();
  }
  
  [DllImport("Library.dll")]
  static extern void Dongsu();
}

16. x86 컴파일러로 컴파일 한다.

csc /platform:x86 Appcs.cs

17. C++로 쓴 코드를 DLL을 통해서 C#에서도 쓰고 있는 모습

'삽질 > COM' 카테고리의 다른 글

COM study note 5 레퍼런스 카운터  (0) 2020.10.28
COM study note 4 인터페이스  (0) 2020.10.27
COM study note 2 역사  (0) 2020.10.26
COM study note 1 소개  (0) 2020.10.26
Win32 API 프로그래밍 note  (0) 2020.10.26
복사했습니다!