동적 링크 라이브러리 DLL은 여기로 연결됩니다. 다른 뜻에 대해서는 DLL (동음이의) 문서를 참고하십시오.
동적 링크 라이브러리(영어: dynamic-link library, DLL)는 마이크로소프트 윈도우에서 구현된 동적 라이브러리이다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 다양한 함수들을 가지고 있는데, 확장DLL인 경우는 클래스를 가지고 있다. DLL은 COM을 담는 그릇의 역할도 한다. 사용하는 방법에는 두 가지가 있는데,
전자의 경우는 컴파일러가 자동으로 해주는 경우가 많으며, 후자의 경우는 사용하고자 하는 DLL이나 함수가 실행 환경에 있을지 없을지 잘 모르는 경우에 사용된다(때때로 메모리 절약을 위해 쓰인다). 프로그램의 예DLL 내보내기(엑스포트) 만들기다음의 예는 DLL로부터 심볼(symbol)을 내보내기 위한 언어의 특정한 묶음을 보여 준다. 델파이 library Example;
// 두 개의 수를 추가하는 함수
function AddNumbers(a, b: Double): Double; cdecl;
begin
Result := a + b;
end;
// 이 함수를 내보낸다
exports
AddNumbers;
// DLL 초기화 코드. 특별한 핸들링이 필요하지 않다.
begin
end.
C #include <windows.h>
// 이 함수 내보내기
extern "C" __declspec(dllexport) double AddNumbers(double a, double b);
// DLL 초기화 함수
BOOL APIENTRY
DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
// 두 개의 수를 더하는 함수
double AddNumbers(double a, double b)
{
return a + b;
}
DLL 가져오기(임포트) 사용하기다음의 예는 컴파일할 때 DLL에 맞춰 링크하기 위한 심볼을 불러오기 위해 어떻게 언어의 특정한 묶음을 사용하는지를 보여 준다. 델파이 program Example;
{$APPTYPE CONSOLE}
// 두 개의 수를 추가하는 함수 가져오기
function AddNumbers(a, b: Double): Double; cdecl; external 'Example.dll';
var result: Double;
begin
result := AddNumbers(1, 2);
Writeln('결과는: ', result)
end.
C, C++ 정적 링크를 하기 앞서 Example.lib 파일(Example.dll이 만들어졌다고 하면)이 프로젝트 안에 반드시 있어야 한다. 또, DLL Example.dll을 다음의 코드로 만들어진 .exe 파일이 있는 곳에 복사해야 한다. #include <windows.h>
#include <stdio.h>
// 두 개의 수를 추가하는 함수 가져오기
extern "C" __declspec(dllimport) double AddNumbers(double a, double b);
int main(int argc, char **argv) {
double result = AddNumbers(1, 2);
printf("결과는: %f\n", result);
return 0;
}
분명한 런타임 링크 사용하기다음의 예는 언어의 특정한 WIN32 API 묶음을 사용하여 런타임 로딩/링크 체계를 사용하는 방법을 보여 준다.
Option Explicit
Declare Function AddNumbers Lib "Example.dll" _
(ByVal a As Double, ByVal b As Double) As Double
Sub Main()
Dim Result As Double
Result = AddNumbers(1, 2)
Debug.Print "결과는: " & Result
End Sub
program Example;
{$APPTYPE CONSOLE}
uses
Windows;
Type
AddNumbersProc = function (a, b: Double): Double; cdecl;
var
result: Double;
hInstLib: HMODULE;
AddNumbers: AddNumbersProc;
begin
hInstLib := LoadLibrary('example.dll');
if hInstLib <> 0 then
begin
AddNumbers := GetProcAddress(hInstLib, 'AddNumbers');
if Assigned(AddNumbers) then
begin
result := AddNumbers(1, 2);
Writeln('결과는: ', result);
end
else
begin
Writeln('오류: DLL 함수를 찾을 수 없습니다');
ExitCode := 1;
end;
FreeLibrary(hInstLib);
end
else
begin
Writeln('오류: 라이브러리를 불러올 수 없습니다');
ExitCode := 1;
end;
ExitCode := 0;
end.
C #include <windows.h>
#include <stdio.h>
// DLL 함수 서명
typedef double (*importFunction)(double, double);
int main(int argc, char **argv)
{
importFunction addNumbers;
double result;
// DLL 파일 불러오기
HINSTANCE hinstLib = LoadLibrary("Example.dll");
if (hinstLib == NULL) {
printf("오류: DLL을 불러올 수 없습니다\n");
return 1;
}
// 함수 포인터 얻기
addNumbers = (importFunction)GetProcAddress(hinstLib, "AddNumbers");
if (addNumbers == NULL) {
printf("오류: DLL 함수를 찾을 수 없습니다\n");
FreeLibrary(hinstLib);
return 1;
}
// 함수 요청하기.
result = addNumbers(1, 2);
// DLL 파일의 로드를 해제한다
FreeLibrary(hinstLib);
// 결과를 보여 준다
printf("결과는: %f\n", result);
return 0;
}
같이 보기외부 링크
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve