21xrx.com
2024-12-22 22:35:13 Sunday
登录
文章检索 我的文章 写文章
如何在C++中调用动态链接库(DLL)?
2023-06-23 11:29:43 深夜i     --     --
C++ 调用 动态链接库 DLL

动态链接库(DLL)是一种Windows操作系统中的共享库文件,它包含了可供多个应用程序共享的一些模块或函数。在C++编程中,我们可以使用DLL实现程序代码的动态加载和调用,以方便我们进行程序开发。

使用C++调用DLL的方法主要有两种:一种是使用Windows API的方式,另一种是使用LoadLibrary()函数。

使用Windows API的方式:

首先需要包含Windows.h头文件,然后调用Windows API函数LoadLibrary()来加载DLL文件,LoadLibrary()函数返回一个指向DLL的句柄(即handle)。接下来使用Windows API函数GetProcAddress()来获取DLL中需要调用的函数指针,然后通过函数指针来调用DLL中的函数。

示例代码如下:

  #include

  #include

  typedef int (*pFunAdd)(int, int);

  int main()

  {

    HINSTANCE hinstDLL;

    pFunAdd funAdd; // 用于调用DLL中的函数

    hinstDLL = LoadLibrary(TEXT("SampleDLL.dll")); // 加载DLL文件

    if (hinstDLL != NULL)

    {

      funAdd = (pFunAdd)GetProcAddress(hinstDLL, "Add"); // 获取DLL中的函数

      if (funAdd != NULL)

      {

        int a = 1, b = 2;

        std::cout << "1 + 2 = " << funAdd(a, b) << std::endl; // 调用DLL中的函数

      }

      FreeLibrary(hinstDLL); // 释放DLL

    }

    return 0;

  }

使用LoadLibrary()函数的方式:

使用LoadLibrary()函数可以直接加载DLL文件,并将其中的函数指针作为返回值。接下来就可以通过函数指针来调用DLL中的函数。

示例代码如下:

  #include

  typedef int (*pFunAdd)(int, int);

  int main()

  {

    HMODULE hmoduleDLL;

    pFunAdd funAdd; // 用于调用DLL中的函数

    hmoduleDLL = LoadLibrary(TEXT("SampleDLL.dll")); // 加载DLL文件

    if (hmoduleDLL != NULL)

    {

      funAdd = (pFunAdd)GetProcAddress(hmoduleDLL, "Add"); // 获取DLL中的函数

      if (funAdd != NULL)

      {

        int a = 1, b = 2;

        std::cout << "1 + 2 = " << funAdd(a, b) << std::endl; // 调用DLL中的函数

      }

      FreeLibrary(hmoduleDLL); // 释放DLL

    }

    return 0;

  }

总体来说,C++程序通过调用DLL,可以提高程序的模块化和可移植性。通过以上两种方法可以很好地调用DLL中定义的函数,提高代码的可读性和代码复用性,为程序开发带来便利。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复