Win32의 동적 라이브러리 로드
동적 라이브러리, Windows에서는 dll 파일, Linux에서는 so, 여기서는 토론하지 않습니다.dll 파일은 파일을 실행할 수 있는 일종이자 PE 파일이다. 그리고 흔히 볼 수 있는 PE 파일 형식은 exe 파일, 즉 Windows 프로그램이다.동적 라이브러리는 단독으로 실행할 수 없습니다. 특정한 프로세스에 불러와야 합니다. 동적 라이브러리의 불러오는 것은 정적 불러오기와 동적 불러오기로 나눌 수 있습니다.프로그램에서 동적 라이브러리를 불러오는 것을 불러오는 것이라고 하고, 다른 프로그램에 동적 라이브러리를 불러오는 것을 주입이라고 하며, 이 뒤에 다시 쓴다.
1. 동적 로드
1)_declspec(dllexport)
동적 불러오기도 실행할 때 불러옵니다. 프로그램이 불러오는 문장까지 실행할 때 동적 라이브러리를 불러옵니다. 동적 불러오기는api 인터페이스 LoadLibrary를 호출합니다.
HMODULE LoadLibraryA(
LPCSTR lpLibFileName
);
인터페이스가 동적 라이브러리 핸들을 되돌려주고 GetProcAddress를 호출하여 함수 주소를 내보냅니다. 동적 라이브러리를 불러오는 목적은 동적 라이브러리의 인터페이스를 호출하는 것입니다.
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
함수 주소를 되돌려줍니다. 다시 시작하기 전에 typedef를 사용하여 함수 형식을 정의해야 합니다. 함수를 내보내는 바늘을 가리킵니다.함수 반환 값은 인삼과 내보내기 함수와 같습니다.이어서 정의된 함수를 호출하는 방식으로 내보내는 함수를 호출할 수 있다.
마지막으로 FreeLibrary를 사용하여 모듈 핸들을 놓습니다.
BOOL FreeLibrary(
HMODULE hLibModule
);
동적 라이브러리에서 내보낼 함수 앞에
extern "C"
_declspec(dllexport)
상술한 동적 불러오는 과정은 dll 파일만 제공하면 됩니다.
2) def 파일
아래 정적 로드된 def 파일의 내용과 같고, 사용 시 LoadLibrary 인터페이스를 호출합니다. 제공해야 합니다.h 헤더 파일.
2. 정적 로드
정적 불러오는 것은 함수를 컴파일할 때 모듈 코드를 프로그램에 불러오는 것이다.정적 로드에도 두 가지 방법이 있는데, 하나는 def 파일이고, 다른 하나는declspec(dllexport)
1) def 파일
def 파일의 형식은 다음과 같습니다.
LIBRARY MoudleName
EXPORTS
Function1 @1
Function2 @2
...
사용할 때 파일 헤더에 다음 문장을 추가하려면 헤더 파일,lib 파일, dll 파일을 제공해야 합니다
#pragma comment(lib,"DllName.lib")
2)_declspec(dllexport)
동적 라이브러리의 내보내기 함수 앞에 더하기
extern "C"
_declspec(dllexport)
사용 시 파일 앞에 더하기
#include "DllName.h"
#pragma comment(lib,"DllName.lib")
extern "C"
_declspec(dllexport) Function()
이 마운트 방식은 헤더 파일,lib 파일, dll 파일을 제공해야 합니다.
lib 파일은 동적 라이브러리의 가져오기 라이브러리로 프로그램 함수 주소 기호 등에 제공되며 정적 라이브러리가 아닙니다.
전재 대상:https://www.cnblogs.com/w1ng/p/10171582.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.