>백엔드 개발 >C++ >C에서 DLL의 함수를 어떻게 동적으로 로드하고 사용할 수 있습니까?

C에서 DLL의 함수를 어떻게 동적으로 로드하고 사용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-20 14:28:10379검색

How Can I Dynamically Load and Use Functions from a DLL in C  ?

DLL에서 동적으로 함수 로드

소개

동적 연결을 사용하면 런타임 중에 DLL에서 함수를 로드하여 다음의 기능을 확장할 수 있습니다. 당신의 프로그램. 이 기사에서는 이를 수행하는 방법을 안내합니다.

DLL 로드

첫 번째 단계는 DLL을 현재 프로세스의 메모리에 로드하는 것입니다. 이 작업은 LoadLibrary 함수를 사용하여 수행됩니다.

HINSTANCE hGetProcIDDLL = LoadLibrary("path/to/test.dll");

함수 주소 가져오기

DLL이 로드되면 호출하려는 함수의 주소를 찾아야 합니다. 이를 위해 GetProcAddress 함수를 사용합니다.

typedef int (__stdcall *f_funci)();
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");

내보낸 함수의 서명과 일치하는 함수 포인터 유형을 정의해야 합니다. 우리의 경우에는 인수를 받지 않고 정수를 반환하는 함수입니다.

DLL에서 함수 내보내기

DLL이 성공적으로 로드되려면 함수를 올바르게 내보내야 합니다. DLL 소스 코드에 다음을 추가하세요.

int __declspec(dllexport) __stdcall funci() {
  // ...
}

함수 사용

함수 주소를 얻은 후에는 다른 함수처럼 호출할 수 있습니다.

std::cout << "funci() returned " << funci() << std::endl;

DLL 핸들 해제

리소스 정리를 위해 다음과 같은 경우 DLL 핸들을 해제하는 것이 좋습니다. 더 이상 필요하지 않습니다.

FreeLibrary(hGetProcIDDLL);

이 단계를 따르면 DLL의 함수를 동적으로 로드하고 사용할 수 있어 프로그램의 유연성과 확장성이 크게 향상됩니다.

위 내용은 C에서 DLL의 함수를 어떻게 동적으로 로드하고 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.