21xrx.com
2025-03-31 14:13:15 Monday
文章检索 我的文章 写文章
C++调用C动态库的方法
2023-07-12 22:30:09 深夜i     13     0
C++ 调用 C动态库 方法

C++和C是两种不同的编程语言,但是有时候我们需要在C++中调用C语言编写的动态库。这个时候,我们需要了解如何使用C++调用C动态库。

首先,我们需要创建一个C++的工程。在头文件中,我们需要声明动态库中的函数。例如,我们有一个名为“testlib.dll”的C动态库,其中包含一个名为“add”的函数,我们可以这样声明:

//头文件声明
extern "C"{
  int add(int a,int b);
}

接下来,在我们的C++代码中,我们需要加载动态库并调用其中的函数。可以使用以下代码加载动态库:

// 加载动态库
HMODULE hDll = LoadLibrary(L"testlib.dll");
if(hDll==NULL)
{
  printf("无法加载动态库文件");
  return -1;
}

接下来,我们需要获得函数的地址。因为我们声明的函数是C函数,所以我们需要使用“GetProcAddress”函数来获取函数地址。代码如下:

// 获取函数地址
typedef int (*ADD)(int ,int); //声明函数指针类型
ADD myadd;//定义函数指针
myadd=(ADD)GetProcAddress(hDll,"add");//获取函数地址

最后,我们就可以调用动态库中的函数了,代码如下:

// 调用函数
int result=myadd(3,4);
printf("%d\n",result);

完整的代码如下:

#include <cstdio>
#include <Windows.h>
// 头文件声明
extern "C" {
  int add(int a, int b);
}
int main(){
  HMODULE hDll = LoadLibrary(L"testlib.dll"); // 加载动态库
  int result=0;
  if(hDll==NULL)
  {
    printf("无法加载动态库文件");
    return -1;
  }
  // 获取函数地址
  typedef int (*ADD)(int ,int);
  ADD myadd;
  myadd=(ADD)GetProcAddress(hDll,"add");
  // 调用函数
  result=myadd(3,4);
  printf("%d\n",result);
  FreeLibrary(hDll);// 卸载动态库
  return 0;
}

在编译时需要将动态库的路径加入到“lib”目录下,并在链接时加上相关的库文件。

总结一下,C++调用C动态库的方法涉及到三个步骤:一是声明动态库中的函数,二是加载动态库并获取函数地址,三是调用动态库中的函数。希望这篇文章能够帮助有需要的读者学会如何使用C++调用C动态库。

  
  

评论区