方法

  • 使用extern "C"修饰
  • 设置统一的调用约定

举例

  • 例1——使用__cdecl,一般C编译器使用此约定,如LabWidnows/CVI。

    • cpp代码
      extern "C" __declspec(dllexport) uint32 __cdecl glFindDevices(uint32* devCnt);

      lib里导出的符号

      __imp__glOpenDevice
      _glOpenDevice
  • 例2,实际VC默认使用__stdcall

    • cpp代码

      extern "C" __declspec(dllexport) uint32 glFindDevices(uint32* devCnt);

      lib里导出的符号

      imp__glOpenDevice@8
      _glOpenDevice@8
  • VC项目属性里可以设置默认的调用约定。

结论

  • 如果使用lib文件静态链接dll文件,要保证调用约定和编译器是一致的,否则会因为“找不到外部符号”导致链接失败。
  • 不推荐使用DEF文件导出函数名称,可能会导致C链接器找不到符号。
  • 推荐使用__declspec(dllexport)__declspec(dllexport)导出导入符号。

参考

VC如何创建C编译器能使用的动态库的更多相关文章

  1. Windows 下VC++6.0制作、使用动态库和静态库

    Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...

  2. windows库的创建和使用:静态库+动态库

    windows库的创建和使用:静态库+动态库   一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...

  3. 在VC中创建并调用DLL

    转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...

  4. VC 静态库与动态库(四)动态库创建与使用_显示调用

    在第三章的基础上,接着添加一个显示调用项目 显示调用项目创建: 1.给解决方案添加一个新的控制台项目DisplayCall用于测试动态库,创建完成后设置为启动项目 2.DisplayCall.cpp添 ...

  5. gcc编译器创建和使用静态库、动态库

    http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155599.html 目录树结构: test/include/hello.h #ifdef ...

  6. VC++ 2010 创建高级Ribbon界面详解(1)

    运用 VC++ 2010 创建高级 Ribbon 界面详解,包括 Ribbon 界面的结构层次.Ribbon 控件的使用等,ribbon 用户界面,ribbon interface ,ribbon 高 ...

  7. VC 静态库与动态库(三)动态库创建与使用_隐式链接

    动态库分为二种,一种隐式链接,另一种显示调用.不论哪种动态库,本质都是运行时动态加载 隐式链接:程序运行时,由编译系统自动加载动态库,然后根据程序的引入表进行重定位,当程序退出时自动卸载动态库 显示调 ...

  8. VC 静态库与动态库(二)静态库创建与使用

    1.新建项目,创建项目和解决方案 StaticLibrary  这是静态库项目 G:\C++Learn\Library  Library文件夹用于存放库相关文件,包含静态库与后面的动态库工程和解决方案 ...

  9. 【转】VS2013动态库文件的创建及其使用详解

    一.VS2013动态库文件的创建 1.新建项目,win32,win32项目,输入项目名称,例如MakeDll. 2.”确定“——”下一步“,选择”DLL“选项,再点”完成“: 3.菜单栏选择”项目“— ...

  10. Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明

    本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...

随机推荐

  1. TCTrack

    TCTrack TCTrack: Temporal Contexts for Aerial Tracking,空中追踪的时间上下文 论文 官方代码 贡献: 提出了一种时间自适应卷积TAdaCNN. 提 ...

  2. Mars3D与第三方集成

    1. 引言 Mars3D是基于Cesium的Web端的三维GIS库,对Cesium做了进一步封装和扩展 Mars3D官网:Mars3D三维可视化平台 | 火星科技 Mars3D开发手册:开发教程 - ...

  3. Linux学习之文件目录指令(部分)

    包括了 ls  pwd  cd  mkdir  rmdir  touch  cp  rm  mv  cat  echo  more  less  head  tail  >  >>指 ...

  4. 【8】java之引用传递

    一.引用传递 ​引用传递是整个 java 的精髓所在 引用传递核心意义:同一块堆内存空间可以被不同的栈内存所指向,不同栈内存可以对同一块堆内存内容进行修改. 范例:第一道引用传递范例 class Me ...

  5. I2C接口

    I2C是一种多向控制总线,它是由PHILIPS公司在二十世纪八十年代初设计出来的,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能,是一种高性能的串行总线.I2C总线只用两根双向传输线就可以 ...

  6. Prometheus监控操作

    一.架构说明 ➢ Prometheus Server:Prometheus 生态最重要的组件,主要用于抓取和存储时间序列数据, 同时提供数据的查询和告警策略的配置管理: ➢  Alertmanager ...

  7. Installing Superset最新版本安装(笔记)

    官方文档:https://superset.apache.org/docs/installation/installing-superset-from-scratch 由于在centos上安装有各种问 ...

  8. RBAC访问控制

    案例:为指定用户授权访问不同命名空间权限,例如公司新入职一个小弟,希望让他先熟悉K8s集群,为了 安全性,先不能给他太大权限,因此先给他授权访问default命名空间od,读取权限. 实施大致步骤: ...

  9. 泛微OA技巧随记

    隐藏明细表的加号按钮,如果不想让用户手工添行,必须通过自动联动添明细行,可以将明细表的加号按钮隐藏. document.getElementById('$addbutton0$').style.dis ...

  10. jmeter进行websocket 通信

    最近项目弄了基于websocket的通信接口,所以需要做一个websocket的接口压测. jmeter当前自带的插件无法进行jmeter接口的通信,所以 本人是下载的一套jar包插件,进行的安装 1 ...