首页 > 其他分享 >VC如何创建C编译器能使用的动态库

VC如何创建C编译器能使用的动态库

时间:2022-12-17 13:22:13浏览次数:67  
标签:__ VC 创建 导出 declspec 编译器 使用 dllexport

方法

  • 使用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,创建,导出,declspec,编译器,使用,dllexport
From: https://www.cnblogs.com/octoberkey/p/16987190.html

相关文章

  • 创建约束
    一、创建表时添加约束#1.创建列级约束语法:直接在字段名和类型后面追加约束类型只支持默认,非空,主键,唯一usestudents#使用某个数据库creattablestu_info(id......
  • 创建线程的4种方法
    线程创建方法1、继承Thread,重写run方法 privatestaticvoidone(){classTextendsThread{@Overridepublicvo......
  • linux(centos)创建虚拟环境并部署airflow
    一、创建虚拟环境1.安装virtualenv,virtualenvwrapperpipinstallvirtualenvvirtualenvwrapper安装好之后创建存放虚拟环境目录,这里我存在~/pythonvenv里,查看当前......
  • 第二十章《Java Swing》第2节:窗体的创建
    JavaSwing的各种组件都是由类来定义的,这些类大部分都位于javax.swing包下,也有小部分位于java.awt包下,因此在使用这些类的时候需要在程序中引入这个包下的类。在JavaSwing......
  • 【Java】单号创建服务
     需求:ERP项目存在若干个业务功能,每个业务的单子的单号创建规则需要被统一规划1、每个业务有自己对应的标识2、业务单号必须以英文字母为前缀,长度在2-4个字符3、单号......
  • 设计模式--创建型模式
    创建型模式      创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是new一个对象,然后set相关属性。但是,在很多场景下,我们需要给客户端提供更加友......
  • tunctl 创建虚拟网卡
    安装[root@]#rpm-ivhhttp://li.nux.ro/download/nux/misc/el7/x86_64/tunctl-1.5-12.el7.nux.x86_64.rpm参数:-u指定用户名,表明这个接口只受该用户控制,这个接口发......
  • C语言和VC视频教程
    C语言视频教程打包下载​​http://pan.baidu.com/share/link?shareid=593441&uk=4280148702​​VC视频教程打包下载​​http://pan.baidu.com/share/link?uk=4280148702&sha......
  • springMVC10(放行静态资源访问)
    一、放行静态资源访问的目的:为了让静态资源不被"springMVC"访问,而被拦截。我们需要让它被"放行"二、目录结构是什么样?2.1.1-在main包下2.1.2-和java包同"级别"2......
  • lvm创建和扩容实例
    ##LVM创建#定义挂载点mount_point='/data'#使用的磁盘disk='/dev/sdb'#定义卷组名称vg_name='vg_data'#定义逻辑卷名称lv_name='lv_data'#创建挂载点目录......