>백엔드 개발 >C++ >C의 DLL에서 함수를 동적으로 로드하고 호출하는 방법은 무엇입니까?

C의 DLL에서 함수를 동적으로 로드하고 호출하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 11:29:10764검색

How to Dynamically Load and Call Functions from DLLs in C  ?

DLL에서 함수의 동적 로드

C의 DLL(동적 링크 라이브러리)에서 함수를 동적으로 로드하면 별도의 정의된 기능에 액세스할 수 있습니다. 런타임에 모듈. 이 문제에 접근하는 방법은 다음과 같습니다.

1. DLL 로드:

<br>HINSTANCE hDLL = LoadLibrary("path/to/dll.dll");<br>

이 단계에서는 DLL을 메모리에 로드하고 핸들을 반환합니다. 입니다.

2. 함수 포인터 가져오기:

DLL 내의 함수에 액세스하려면 GetProcAddress를 사용하여 해당 주소를 가져와야 합니다:

<br>typedef int (__stdcall *f_funci )(); // 함수 포인터 유형 정의<br>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");<br>

이 예에서는 함수 이름이 "funci"이고 다음을 사용한다고 가정합니다. __stdcall 호출 규칙

3. 함수 호출:

함수 포인터가 있으면 다른 함수처럼 함수를 호출할 수 있습니다.

<br>int result = funci(); <br>

4. DLL에서 함수 내보내기:

DLL에서는 다른 모듈에서 함수에 액세스할 수 있도록 __declspec(dllexport)를 사용하여 함수를 내보내야 합니다.

<br>int __declspec(dllexport) __stdcall funci() {<br> // 함수 정의<br>}<br>

추가 팁:

  • DLL 핸들이 필요한 경우 FreeLibrary()를 사용하여 DLL 핸들을 해제하는 것이 좋습니다. 더 이상 필요하지 않습니다.
  • 함수 서명과 정확히 일치하는 함수 포인터 유형을 사용하세요.
  • DLL 로드 또는 함수 해결과 관련된 문제를 처리하려면 적절한 오류 처리를 확인하세요.

위 내용은 C의 DLL에서 함수를 동적으로 로드하고 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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