#DLL 동적 라이브러리 작성
1.new->project->win32 Dynamic_LInk
DLL 프로그램 작성..
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
//def => 함수 export 정보를 기록....
extern "C" // C 코드로 인신...
__declspec(dllexport) int Gop(int a,int b) //export 설정...
{
return a*b;
}
/*
extern "C" // C 코드로 인신...
__declspec(dllexport) double Gop(double a,double b) //export 설정...
{
return a*b;
}*/
2.작성후 DEBUG 폴더안에 *.lib *.dll 파일 응용 프로그램 프로젝트로 복사...
1.prject->setting->link->*.lib 추가 ->작성...
// 묵시적링크.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
extern "C" __declspec(dllimport) int Gop(int ,int); //함수 프로토타입 dll 작성시 선언과 동일하게 선언
int main(int argc, char* argv[])
{
int result=Gop(10,20);
printf("Gop result =%d \n",result);
return 0;
}
#명시적 링크 사용방법
1.new->project->win32 Dynamic_LInk
DLL 프로그램 작성..->DLL 파일 이동후 저장
// calcDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
/*
DLL_PROCESS_ATTACH 1 //메모리에 로드될때 호출..
DLL_THREAD_ATTACH 2 //dll 함수가 호출될때 (함수 실행시)
DLL_THREAD_DETACH 3 //DLL 함수 종료시...호출...
DLL_PROCESS_DETACH 0 // 메모리에서 내려올때 호출..
*/
#define MSGBOX(msg) MessageBox(NULL, msg,"DLL",0)
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD reason,
LPVOID lpReserved
)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
MSGBOX("DLL_PROCESS_ATTACH");
break;
case DLL_THREAD_ATTACH:
MSGBOX("DLL_THREAD_ATTACH");
break;
case DLL_THREAD_DETACH:
MSGBOX("DLL_THREAD_DETACH");
break;
case DLL_PROCESS_DETACH :
MSGBOX("DLL_PROCESS_DETACH");
break;
}
return TRUE;
}
int Plus(int a, int b)
{
return a+b;
}
int Minus(int a, int b)
{
return a-b;
}
/*
//파스칼 표준 호출 규약
__stdcall
스택에 생성된 함수인자를 클아이언트쪽에서 삭제..
//C 표준호출 규약 (생략하면 자동으로 c표준)
__cdecl
스택에 생성된 함수인자를 서버쪽에서 삭제..
CalcDll.def
*/
2.응용프로그램 작성
// 명시적링크.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
typedef int (* MYCALCTYPE)(int, int); //함수를 typedef하여 함수 자료형을 만들어 사용
int main(int argc, char* argv[])
{
//DLL Load
HMODULE hMod=LoadLibrary("calcDll.dll");
//FARPROC
MYCALCTYPE Add =(MYCALCTYPE)GetProcAddress(hMod,"Plus");
int result=Add(10,20);
printf("Plus result =%d\n",result);
MYCALCTYPE Sub =(MYCALCTYPE)GetProcAddress(hMod,"Minus");
result=Sub(10,20);
printf("Minus result =%d\n",result);
//DLL unLoad
FreeLibrary(hMod);
return 0;
}
/*
명시적 링크에 필요한 함수
//로드
HMODULE LoadLibrary("화일명.dll");
//언로드
FreeLibrary(HMODULE);
//함수정보(포인터)구하기
FARPROC GetProcAddress(HMODULE,"함수명");
*/
#정적 라이브러리 작성
1.lib 파일 만들기...
new-> project->statci library->cpp작성
#include <stdio.h>
void Hi()
{
puts("HI~~~~~~!!");
}
void Hello()
{
puts("Hello~~~~!!");
}
void Goodbye()
{
puts("Goodbye~~~~!!");
}
-> lib파일 프로젝트에 복사
2.응용프로그램 작성
// Hello_App.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void Hi();
void Hello();
void Goodbye();
int main(int argc, char* argv[])
{
Hi();
Hello();
Goodbye();
return 0;
}
'Infomation > Tip & Tech' 카테고리의 다른 글
이클립스사용시 톰캣5.X의 JNDI DB Connection Pool 설정 (0) | 2007.12.10 |
---|---|
합계액(공급가액+부가세)에서 부가세 계산하기 (2) | 2007.11.30 |
SW기술자 노임단가 및 기술등급 (2007년도) (0) | 2007.11.26 |
외부DLL에 있는 함수 사용하기 - 동적 (0) | 2007.11.26 |
XHTML 일반 문법 준수 (0) | 2007.11.26 |