동적 연결을 사용하면 런타임 중에 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 소스 코드에 다음을 추가하세요.
int __declspec(dllexport) __stdcall funci() { // ... }
함수 주소를 얻은 후에는 다른 함수처럼 호출할 수 있습니다.
std::cout << "funci() returned " << funci() << std::endl;
리소스 정리를 위해 다음과 같은 경우 DLL 핸들을 해제하는 것이 좋습니다. 더 이상 필요하지 않습니다.
FreeLibrary(hGetProcIDDLL);
이 단계를 따르면 DLL의 함수를 동적으로 로드하고 사용할 수 있어 프로그램의 유연성과 확장성이 크게 향상됩니다.
위 내용은 C에서 DLL의 함수를 어떻게 동적으로 로드하고 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!