우선 dll 을 만들어 컴파일 하면, 프로젝트명과 동일한 헤더파일, lib 파일, dll 파일이
extern "C" DLLTYPE int my_add (int a, int b);
...이하 동일
- my_Math.cpp -
#define DLLEXPORT // DLLEXPORT 상수선언 (export 될 것임을 명시하는 부분)
#include "my_Math.h"
- 명시적 실행 소스 코드 -
#include <stdio.h>
#include <windows.h>
// 명시적으로 로드하는 경우, dll 에서 직접 함수의 주소를 읽어 오므로
// 함수의 원형선언 조차도 필요 없습니다.
//_declspec(dllimport) int my_sub(int,int);
//_declspec(dllimport) int my_add(int,int);
typedef int (*ALUFunc)(int,int);
int main()
{
int a=3,b=5;
int result;
ALUFunc my_func ; //함수 포인터 선언
HINSTANCE hInstLib = LoadLibrary("___.dll"); // dll 파일명 맞는지 확인할 것 !!
if (hInstLib == NULL)
{
printf("오류: DLL을 불러올 수 없습니다\n");
return 1;
}
my_func = (ALUFunc)GetProcAddress(hInstLib,"my_add");
if (my_func==NULL)
{
printf("오류: DLL 함수를 찾을 수 없습니다\n");
FreeLibrary(hInstLib);
return 1;
}
// 함수 요청하기.
result = my_func(1, 2);
// DLL 파일의 로드를 해제한다
FreeLibrary(hInstLib);
// 결과를 보여 준다
printf("결과는: %f\n", result);
}
- 묵시적 실행 소스 코드 -
#include <stdio.h>
#include "my_Math.h" // dll 의 헤더 포함
#pragma comment(lib, "my_Math.lib") // 필요한 함수가 어떤 dll 에 있는지 알려주는 역할(링크시 필요)
// dll 의 함수의 원형을 이렇게 하나씩 선언해도 되긴 하지만, 함수의 수가 많아지면
// 이는 굉장히 귀찮은 작업이 됩니다. (my_Math.h 포함하는 것으로 이를 방지함)
/*
extern "C" __declspec(dllimport) int my_add(int a,int b);
extern "C" __declspec(dllimport) int my_sub(int a,int b);
extern "C" __declspec(dllimport) int my_mul(int a,int b);
extern "C" __declspec(dllimport) int my_div(int a,int b);
*/
int main()
{
int a=3,b=5;
printf("%d",my_add (a,b));
// return a+b;
printf("%d",my_sub (a,b));
// return a+b;
my_mul (a,b);
// return a+b;
my_div (a,b);
return 0;
}
'운영체제 & 병렬처리 > DLL_LIB' 카테고리의 다른 글
[Lib] 정적 라이브러리 만들기(상세 과정) (0) | 2012.12.03 |
---|---|
DLL 임포트 방법들 (0) | 2012.11.20 |
DLL 제작방법 – 1. Non-MFC DLL (0) | 2012.11.03 |
directx 릴리즈,디버그 lib (0) | 2012.11.02 |
lib 파일 생성과 사용 (0) | 2012.11.01 |