DLL 간단한 예

2215 단어 dll
DLL 호출 방법:
  • 정적 호출
  • 동적 호출(실행 시 호출 표시)
  • 코드는 다음과 같습니다.
  • DLL
  • DLL을 컴파일하면 DLL과 LIB 두 문서(TestDLL.dll, TestDLLL.lib)가 생성됩니다.
  • LIB 문서는 컴파일할 때 DLL을 연결하는 데 사용되며, 이를 참조 링크 라이브러리라고 합니다.

  • #include <windows.h>
    
    
    
    // Export this function
    
    extern "C" __declspec(dllexport) double AddNumbers(double a, double b);
    
    
    
    // DLL initialization function
    
    BOOL APIENTRY
    
    DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
    
    {
    
    	return TRUE;
    
    }
    
    
    
    // Function that adds two numbers
    
    double
    
    AddNumbers(double a, double b)
    
    {
    
    	return a + b;
    
    }
  • 정적 호출
  • TestDLL.lib을 컴파일 디렉터리로 복사
  • TestDLL.dll을 exe 디렉터리에 복사
  • #include <windows.h>
    
    #include <stdio.h>
    
    #pragma comment(lib,"TestDLL.lib") //       
    
    
    
    // Import function that adds two numbers
    
    extern "C" __declspec(dllimport)double AddNumbers(double a, double b);
    
    
    
    int
    
    main(int argc, char **argv)
    
    {
    
    	double result = AddNumbers(1, 2);
    
    	printf("The result was: %f
    ", result); system("pause"); return 0; }
  • 동적 호출
  • TestDLL.dll을 exe 디렉터리에 복사
  • TestDLL 필요 없음lib

  • #include <windows.h>
    
    #include <stdio.h>
    
    
    
    // DLL function signature
    
    typedef double (*importFunction)(double, double);
    
    
    
    int
    
    main(int argc, char **argv)
    
    {
    
    	importFunction addNumbers;
    
    	double result;
    
    
    
    	// Load DLL file
    
    	HINSTANCE hinstLib = LoadLibrary(L"TestDLL.dll");
    
    	if (hinstLib == NULL) {
    
    		printf("ERROR: unable to load DLL
    "); return 1; } // Get function pointer addNumbers = (importFunction)GetProcAddress(hinstLib, "AddNumbers"); if (addNumbers == NULL) { printf("ERROR: unable to find DLL function
    "); return 1; } // Call function. result = addNumbers(1, 2); // Unload DLL file FreeLibrary(hinstLib); // Display result printf("The result was: %f
    ", result); system("pause"); return 0; }
  • 동적 호출 실패 원인:
  • 호출약정이 일치하지 않음
  • 내보내기 함수 이름이 수정됨(Depends.exe를 통해 내보내기 함수 이름을 볼 수 있음)
  • 해당 LIB 또는 DLL을 해당 디렉토리에 복사하지 않음
  • 좋은 웹페이지 즐겨찾기