C++中DLL文件的生成与调用

C++中DLL文件的生成与调用

  • 1.先新建一个dLL工程
    • 1.文件->新建->项目->visual c++->win32->填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成.
    • 2.代码
extern "C"_declspec(dllexport) void maopao(int *p,int count);
void maopao(int *p,int count)
{ int temp=0;
  for(int i=1;i<count;i++)
  {for(int j=count-1;j>=i;j--)
  { if(p[j]>p[j-1])
  {temp=p[j];
    p[j]=p[j-1];
    p[j-1]=temp;
  }
  }
  }
}

2.动态调用DLL

// TestDll.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<Windows.h> //说明我想用windows32方法来加载和卸载DLL
typedef int(*Dllfun)(int ,int); //用typedef定义一个指针函数类型,这个指针类型,要和你调用的函数类型和参数保持一致
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{

  Dllfun add;
  HINSTANCE hdll; //定一个句柄实例,用来取DLL的实例地址。
  hdll=LoadLibrary("Add.dll");//可以直接吧DLL文件copy到测试工程的Debug文件夹下;这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在配置-属性-常规里面把默认字符集“unicode”改成支持多字符扩展即可。
  if(hdll==NULL)//取的地址要判断,返回的句柄是否为空,如果为无效句柄,那么要释放加载DLL所占用的内存。
  {
      FreeLibrary(hdll);
  }
  add=(Dllfun)GetProcAddress(hdll,"add");//获取函数地址

   if(add==NULL)//这里也要判断要函数指针是否为空,如果没取到要求的函数,那么要释放句柄
  {
      FreeLibrary(hdll);
  }
  int a=1,b=2,c;
  c=add(a,b);//这里不能用函数名来使用函数,因为这个DLL本身不是当前CPP的一部分,而是通过windows去调用.没有在这个工程里声明或者定义,而是暴露出一个头,要指针获取他的地址,通过指针来调用.
  cout<<c;
  FreeLibrary(hdll);
    cin.get();
  return 0;

}

3.静态调用DLL
需要.h、.lib、.dll三件套。 这种方式不是很好。需要配置。

新建“控制台应用程序”或“空项目”。

配置如下:(这一点非常重要)

项目->属性->配置属性->VC++ 目录-> 在“包含目录”里添加头文件Add.h所在的目录

项目->属性->配置属性->VC++ 目录-> 在“库目录”里添加头文件Add.lib所在的目录

项目->属性->配置属性->链接器->输入->在“附加依赖项”里添加“Add.lib”(若有多个 lib 则以空格隔开)

参考文章:
matlab生成dll
VC++动态链接库(DLL)编程深入浅出(zz)
matlab如何生成.dll文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值