|
하느리 님이 쓰신 글 :
: dll을 이용하는 것은 시스템 리소스를 보다 원할하게 사용하고자 할 때, 타 프로그램과 동일한 자료를 공유하고자 할 때, 혹은 해당되는 기능을 구현하기 위해 어쩔 수 없이 사용하게 되는데요.
: dll을 내 프로그램에 연결시키는 방법은 두가지가 있습니다.
:
: 1. 정적링크
: 현재 만들고 계신 방법이 이 방법에 해당합니다. 정적링크는 프로그램이 실행될 때 함께 메모리상에 로드되어 사용되고, 프로그램이 죽으면 함께 메모리상에서 내려집니다(제거됩니다). 이 방법의 장점은 소스코딩이 간단하다는 것. 하지만 dll 내에 export되어진 함수나 자료를 사용하지 않을 때도 계속적으로 메모리 상에 상주하기 때문에 자원의 낭비가 좀 있습니다.
: 만드는 방법은,
: dll 소스
: a.c------------------------------------
: 리턴타입 CALLBACK 함수명 (파라미터인자)
: {
: 함수내용
: }
: a.h------------------------------------
: 리턴타입 __import 함수명 (파라미터인자);
:
: 그리고 실행프로그램쪽에서
: 프로젝트 내에 lib를 첨가하고, dll 내의 자원을 사용하는 곳에 a.h를 포함시킵니다.
: 이러면 무난히 처리될 것입니다.
:
: 2. 동적링크
: 동적링크는 프로그램을 실행할 때, dll이 함께 메모리상에 로드되는 것이 아니라 LoadLibrary라는 함수를 사용하여 프로그램 내에 필요한 곳에서 코딩하여 호출하는 방식입니다. 이렇게 할 경우, 정적링크와 반대로, 코딩은 복잡해지지만, 실제 사용시 메모리 사용효율이 높습니다.
: 만드는 방법은,
: dll 소스
: a.c------------------------------------
: extern "C" __export __stdcall 리턴타입 함수명 (파라미터인자)
: {
: 함수내용
: }
:
: 실행프로그램쪽-------------------------
: 1. dll load
: 리턴타입 (__stdcall *함수명) (파라미터인자);
: HANDLE dll = LoadLibrary ("dll명.dll");
: 함수명 = (리턴타입 (__stdcall*)(파라미터인자)) GetProcAddress (dll, "함수명");
: 이렇게 하신 후, 함수명이 NULL이 아니면 함수를 호출하여 사용하시면 됩니다.
: 2. dll unload
: FreeLibrary (dll);
:
: 이렇게 하시면 동적링크가 됩니다.
:
:
: 제가 너무 대충대충 설명해서 좀 그런데, 혹 이해 않되시는 부분이 있으면 리플 달아 주세요.
:
:
:
:
:
:
:
:
: 초식수련자 님이 쓰신 글 :
: : DLL 을 만든후에 새로운 프로그램으로 DLL 파일의 헤더파일을 인클루드하는 방법으로
: :
: : 프로그램을 만들었는데요..
: :
: : 프로젝트파일소스코드에
: : USERES("**.res");
: : USEFORM("Unit1.cpp",Form1);
: : USELIB("**Dll.Lib");
: : 의 내용을 덧붙이고
: :
: : Unit1.cpp 에 DLL의 헤더파일을 인클루드시킨후
: : 버튼으로 DLL 의 함수를 호출해서 컴파일시켰는데 항상.. 계속...
: :
: : [Linker Error]Unresolved external '함수명' referenced From C:\..\UNIT1.obj
: :
: : 이라는 에러가 자꾸 나는군요.. 도무지 알길이 없어 이렇게 글을 올립니다.
: :
: : 부탁드립니다.
|