1.lib库我们称之为静态库,在编译的时候调用,而dll库早使用的时候地时候调用。

如果你希望自己写的库既能给c语言用,又能给c++语言用。就需要写一个宏,如下所示,这个宏表不管是C++工程调用还是C工程调用,都以C的方式调用

#ifdef __cplusplus
extern "C"
{#endifint ADD(int a,int b);#ifdef __cplusplus
}
#endif

6.库函数返回的数据类型

3.2 显示加载方式加载dll
另一种是通过LoadLiabrary函数显示加载dll。代码如下。需要注意的是这时候我们不再需要注册.lib文件,也不需要声明外部函数。只要在需要使用的地方调用dll文件即可。

void CXXXDlg::OnBtnSubtract()
{// TODO: Add your control notification handler code hereHINSTANCE hInst;hInst = LoadLibrary(L"Dll1.dll");typedef int(*SUBPROC)(int a, int b);SUBPROC Sub = (SUBPROC)GetProcAddress(hInst, "subtract");CString str;str.Format(_T("5-3=%d"), Sub(5, 3));FreeLibrary(hInst);       //LoadLibrary后要记得FreeLibraryMessageBox(str);
}

动态库加载出现的问题:
方案1:
usb.h文件:

#ifndef USBDLL_H
#define USBDLL_H
//
//
//条件编译指令
#ifndef  _ADDAPI#define  ADDAPI _declspec(dllexport)
#else  #define  ADDAPI _declspec(dllimport)
#endif
//
//声明导出函数
//__declspec(dllexport)extern "C"  int ADDAPI getUSbDev();///导出函数
extern "C"  int ADDAPI sendUSbmessage();extern "C" 改为C语言的调用方法,cpp文件函数就不会被改名#endif

usb.cpp文件:

typedef int (*PADD)(int a,int b);
typedef int (*SUB)(int a,int b);
///注意C++语法会改变动态库函数的名字,必须将函数的名字从usbdll.cpp改为usbdll.c
int main()
{HMODULE hdll=LoadLibrary(L"../Debug/testdll.dll");if (hdll==NULL){printf("动态可加载失败 ")}PADD pAdd=(PADD)GetProcAddress(hdll,"add");SUB  pSUb =(SUB)GetProcAddress(hdll,"sub");//pAdd就是add,pSUb就是sub函数FreeLibrary(hdll);///动态加载的好处就是可以自动释放
}

方案2:

#pragma comment(lib,"hid.lib");隐式调用动态库,不存在函数名乱码问题

方案3:
创建模块定义文件(def文件)。将函数名字依次每列写进去。动态库函数名字就不会被改

lib(静态库)和dll(动态库)的生成和使用详细说明以及注意事项相关推荐

  1. C++中.lib静态库、.dll动态库的生成及调用2

    关于动.静态库的介绍及静态库的生成及调用参见:C++中.lib静态库..dll动态库的生成及调用<1>,本文主要介绍基于VS2015平台的动态库dll的生成及调用方法. 一.动态库的生成 ...

  2. C++中.lib静态库、.dll动态库的生成及调用1

    一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...

  3. VS2019:C++程序lib静态库、dll动态库的生成和使用

    一.静态库 静态库的使用需要(1).h头文件:(2).lib静态库文件: 1.静态库生成 (1)项目-右键属性-常规-配置类型-选静态库: (2)点击生成,Debug文件夹下出现lib静态库: 2.静 ...

  4. .h头文件 .lib库文件 .dll动态库文件之间的关系

     .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...

  5. 在 windows 上如何根据 dll 动态库生成 lib 文件?

    在 windows 系统平台上,dll 动态库没有提供 .lib 文件,又不想动态获取函数地址怎么办? 使用 lib.exe 工具可以根据 .def 定义文件生成 .lib 文件. 例如,我这里有一个 ...

  6. Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)

    共4个小步骤,每个小步骤你都可以新建个VS解决方案,自己跟着步骤跑一下,windows怎么[生成静态库.生成动态库.引用静态库.引用动态库]你就基本明白了@! 文章目录 1.导出静态库.lib(add ...

  7. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  8. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  9. linux库引入之动态库静态库(生成和使用)

    库: 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容. 如何使用 用户需要同时具有头文件和库. ...

  10. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

最新文章

  1. 雷军做程序员时写的博客,太牛了!
  2. vue(2)---computed,watch--2019.5.21学习笔记
  3. mybatis应用(三)优化
  4. 从民办三本到知名企业感知算法工程师
  5. FreeCodeCamp之数字转罗马数字
  6. OpenCV中将RGB数组在内存中压缩成JPEG文件
  7. 读写锁原理 java_java多线程-读写锁原理
  8. Ext Store Proxy Ajax
  9. 批量裁剪或延伸的lisp程序_10 行 Python 代码,批量压缩图片 500 张,简直太强大了...
  10. EEGLAB的下载与安装
  11. ios 后台唤醒应用_iOS 前后台机制以及后台唤醒机制【个人学习】
  12. 软件开发方法 --- 结构化方法
  13. 解析:浏览器事件冒泡及事件捕获
  14. python的print输出格式举例_python中print输出格式是什么
  15. 传智播客成都中心官网全新改版
  16. 构建CA证书详解过程步骤
  17. 使用visio来进行画类图
  18. scrapy 用爬虫规则指定爬行轨迹自动抓取
  19. win10 win7 php,win10装win7双系统引导
  20. 软件架构设计原则-里氏替换原则

热门文章

  1. Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
  2. heidiSQL使用简介
  3. alloc、init你弄懂50%了吗?
  4. 荐六十款针对Hadoop和大数据顶级开源工具
  5. 使用admodify工具修改用户主目录时的注意事项
  6. POJ2391(最大流Isap+Floyd+二分)
  7. 第十五章 五虎上将中谁最冷血
  8. Silverlight 游戏开发小技巧:轨迹跟随效果
  9. Nginx+Supervisor安装部署.NET Core项目
  10. 构建区块链数字货币交易平台服务器的选择