#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;
}


Posted by 옴팡투덜이

BLOG main image
by 옴팡투덜이

공지사항

카테고리

분류 전체보기 (59)
감상과 비평 (15)
자기 고찰 (0)
Infomation (40)
아이디어 (0)
일탈을 꿈꾸는 나의 일상 (1)

최근에 올라온 글

최근에 달린 댓글