Dll 시작
3888 단어 dll
여기에는 Dll의 내용을 많이 설명하지 않고, 단지 자주 사용하는 두 가지 dll 작성 방법을 기록할 뿐이다.
하나.Dll의 작성
첫 번째 방법:
우선 vs 2010--->win32 응용 프로그램 --->dll 프로젝트 (MyDll) ---->빈 프로젝트를 선택하지 말고 dllmain 함수 입구를 생산하도록 하세요.네가 익숙해진 후에도 스스로 쓸 수 있다.
// dllmain.cpp
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
첫 번째 방법은 extern "C"를 사용합니다declspec(dllexport) 방식은 가감법을 예로 들 수 있습니다.
// MyDll.cpp
extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);
int Max(int a, int b)
{
if(a>=b)return a;
else
return b;
}
int Min(int a, int b)
{
if(a>=b)return b;
else
return a;
}
두 번째 방법:
(1) 아래의 설명을 제거한다
//extern "C" _declspec(dllexport) int Max(int a, int b);
//extern "C" _declspec(dllexport) int Min(int a, int b);
(2) Min, Max 함수 앞에 extern "c"를 붙이고 함수를 내보내려면 반드시 이런 방식으로 써야 하며 오류가 발생하지 않도록 해야 한다.
extern "c" int Max(int a, int b)
{
if(a>=b)return a;
else
return b;
}
extern "c" int Min(int a, int b)
{
if(a>=b)return b;
else
return a;
}
(3) 추가.def 파일, 이 파일에 출력 함수를 표시합니다. (내 vs 자동으로 추가할 수 없기 때문에 로컬에서 수동으로.def 파일을 만들고 프로젝트 설정 속성인 Link-->Input--->Module Definition File에서.def 파일 이름을 설정합니다.)
;
; Cmpnt1 module-definition file
;
LIBRARY MyDll.dll
DESCRIPTION '(c)1996-1997 Dale E. Rogerson'
EXPORTS
Min @1 PRIVATE
Max @2 PRIVATE
직접 Build 프로젝트는 디렉터리에서 상응하는 것을 생성할 수 있습니다.lib 및.dll 파일.
둘.Dll 호출
(1) 암시적 링크.
스텔스 링크는 프로그램이 실행될 때 DLL 파일을 응용 프로그램에 불러오는 것입니다.함수 키워드만 가져오면declspec (dllimport) 함수 이름 등은 응용 프로그램의 헤더 파일에 쓰면 됩니다.이런 방법은 필요하다.lib 파일도 테스트 공정으로 복사합니다.
#pragma comment(lib,"Messagebox.lib")
extern "C"_declspec(dllimport) int Max(int a,int b);
extern "C"_declspec(dllimport) int Min(int a,int b);
#include <windows.h>
#include<stdio.h>
int main()
{
int a;
a=Max(8,10);
printf(" %d
",a);
a=Min(8,10);
printf(" %d
",a);
return 0;
}
(2) 동적 링크
동적 링크는 복사할 필요가 없습니다.lib 파일을 테스트 프로젝트 디렉터리로 이동합니다.동적 링크는 프로그램에서 동적 마운트, 동적 마운트 해제로 메모리 사용을 줄일 수 있습니다.응용 프로그램에서 LoadLibrary 또는 MFC가 제공하는 AfxLoadLibrary로 자신이 만든 동적 링크 라이브러리를 현저하게 불러옵니다.그런 다음 GetProcAddress()를 사용하여 가져올 함수를 가져옵니다.프로그램이 종료될 때 FreeLibrary 또는 AfxFreeLibrary를 사용하여 동적 링크 라이브러리를 해제합니다.
/*
: MyDll.dll , lib
*/
#include<windows.h>
#include<stdio.h>
void main(void)
{
// DLL
typedef int(*pMax)(int a,int b);
typedef int(*pMin)(int a,int b);
HINSTANCE hDLL;// DLL
pMax Max;
int a=0;
hDLL=LoadLibrary("MyDll.dll");// MyDll.dll ;
Max=(pMax)GetProcAddress(hDLL,"Max");//
a=Max(5,8);
printf(" %d
",a);
FreeLibrary(hDLL);// MyDll.dll ;
}
참고: 첨부파일 참조!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.