C++-VisualStudio链接库

静态链接库:lib

建立头文件testlib.h--建立源文件testlib.cpp

testlib.h


#ifndef TESTLIB_H

#define TESTLIB_H

//防止头文件重复包含

//条件编译指令

//加减乘除

int add(int a,int b);

#endif

testlib.cpp

#include "testlib.h"

//加减乘除

int add(int a,int b)

{

     return a+b;

 }  

在VS里面点击生成-解决方案(静态库已经开发好了)

在testlib/Debug目录下,生成testlib.lib(二进制代码)

lib,库文件不能独立运行

新建一个项目,建立源文件test.cpp

#include <stdio.h>

//解决方案testlib中有两个项目,分别是test和testlib

#include "../testlib/testlib.h"//上一级目录下

//右击项目-属性-连接器-常规-附加库目录-写相对路径(包含testlib.lib)

#pragma comment(lib,"testlib.lib")

int main()

{

  printf("请输入两个整数,计算当前两个整数的和\n");

  int a,b;

  scanf("%d%d",&a,&b);

  //调用一下静态库

  printf("add(a,b)=%d\n", add(a,b));

  reutrn 0;

}

进行打包发布,新建文件夹,在文件夹下面新建include文件夹(包含头文件),lib文件夹(包含lib文件)

动态链接库:dll

需要工具-百度-www.dependencywalker.com-x64是64位的,x86是32位的

静态库将所有lib组合到exe中,容易造成exe过大

动态库,动态加载,利于软件升级,联网-下载-替换-重启

头文件testdll.h-源文件testdll.cpp

testdll.h

#ifndef TESTDLL_H

#define TESTDLL_H

int add(int a,int b);

#endif

testdll.cpp

#include"testdll.h"

int add(int a,int b)

{

  return a+b;

}

动态库不能独立运行,可以按Ctrl+f,会显示无法运行程序,不过没有问题

或者右键项目-重新生成

在testdll/Debug目录下,testdll.dll

将testdll.dll往Dependency里面一拖

在testdll.h里面添加

testdll.h

#ifndef TESTDLL_H

#define TESTDLL_H

//条件编译指令

//右击项目-属性-配置属性-c/c++-预处理器-预处理器宏定义-加上_DLLAPI

#ifdef _DLLAPI

//同时生成了testdll.lib和testdll.exp

  #define DLLAPI _declspec(dllexport) 

#else 

  #define DLLAPI _declspec(dllimport) 

#endif

//声明导出函数,使用c语言的方式来进行编译

extern "C" DLLAPI int  add(int a,int b);

#endif

动态库的使用

新建一个项目,建立源文件test.cpp

#include <stdio.h>

#include "../testdll/testdll.h"

//右击项目-属性-连接器-常规-附加库目录-写相对路径(包含testdll.dll)

//导入

//#pragma comment(lib,"testdll.lib")//这个不是真正的静态库,隐式调用动态库

//显示调用静态库

#include <windows.h>

typedef int (*PADD)add(int a,int b);//函数指针

int main()

{

  printf("请输入两个整数,计算当前两个整数的和\n");

  int a,b;

  scanf("%d%d",&a,&b);

  //显示调用动态库,在需要的时候用

  //加载一下dll文件

  HMODULE hDLL = LoadLibrary(L"../Debug/testdll.dll");

  if(hDLL==NULL)

 {

    printf("加载DLL文件失败。\n");

    return 0;

  }

  //导出函数,获取函数的指针

  //c语言的动态库,是原来的名称,但cpp会改变

  //为了防止编译器把导出接口改名字,需要更改testdll.h文件

  PADD pAdd=(PADD) GetProcAddress(hDLL,"add");

  printf("add(a,b)=%d\n", add(a,b));

  FreeLibrary(hDLL);

  reutrn 0;

}

有模块定义文件:使用原始头文件-右键项目-重新生成

右键项目-添加-新建项-代码-def文件

LIBRARY testdll

EXPORTS 

add

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值