21xrx.com
2024-11-22 06:44:05 Friday
登录
文章检索 我的文章 写文章
C++调用C动态库的方法
2023-07-12 22:30:09 深夜i     --     --
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动态库。

  
  

评论区

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