VC如何创建C编译器能使用的动态库
方法
- 使用extern "C"修饰
- 设置统一的调用约定
举例
例1——使用
__cdecl
,一般C编译器使用此约定,如LabWidnows/CVI。- cpp代码
extern "C" __declspec(dllexport) uint32 __cdecl glFindDevices(uint32* devCnt);
lib里导出的符号
__imp__glOpenDevice
_glOpenDevice
- cpp代码
例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编译器能使用的动态库的更多相关文章
- Windows 下VC++6.0制作、使用动态库和静态库
Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...
- windows库的创建和使用:静态库+动态库
windows库的创建和使用:静态库+动态库 一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...
- 在VC中创建并调用DLL
转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...
- VC 静态库与动态库(四)动态库创建与使用_显示调用
在第三章的基础上,接着添加一个显示调用项目 显示调用项目创建: 1.给解决方案添加一个新的控制台项目DisplayCall用于测试动态库,创建完成后设置为启动项目 2.DisplayCall.cpp添 ...
- gcc编译器创建和使用静态库、动态库
http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155599.html 目录树结构: test/include/hello.h #ifdef ...
- VC++ 2010 创建高级Ribbon界面详解(1)
运用 VC++ 2010 创建高级 Ribbon 界面详解,包括 Ribbon 界面的结构层次.Ribbon 控件的使用等,ribbon 用户界面,ribbon interface ,ribbon 高 ...
- VC 静态库与动态库(三)动态库创建与使用_隐式链接
动态库分为二种,一种隐式链接,另一种显示调用.不论哪种动态库,本质都是运行时动态加载 隐式链接:程序运行时,由编译系统自动加载动态库,然后根据程序的引入表进行重定位,当程序退出时自动卸载动态库 显示调 ...
- VC 静态库与动态库(二)静态库创建与使用
1.新建项目,创建项目和解决方案 StaticLibrary 这是静态库项目 G:\C++Learn\Library Library文件夹用于存放库相关文件,包含静态库与后面的动态库工程和解决方案 ...
- 【转】VS2013动态库文件的创建及其使用详解
一.VS2013动态库文件的创建 1.新建项目,win32,win32项目,输入项目名称,例如MakeDll. 2.”确定“——”下一步“,选择”DLL“选项,再点”完成“: 3.菜单栏选择”项目“— ...
- Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...
随机推荐
- 大规模 IoT 边缘容器集群管理的几种架构-5-总结
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-H ...
- CSS 定位position
.link span { position: absolute; top: 0; left: 50%; transform: translateX(-50%); }
- ArcGIS for Android 实现地图基本操作
地图基本操作 1.前期项目准备 1.1. 创建新工程 新建一个空活动项目 选择语言.平台,修改命名等 1.2. 添加ArcGIS SDK build.gradle (Project: <proj ...
- LeetCode-1405 最长最快乐字符串
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-happy-string 题目描述 如果字符串中不含有任何 'aaa','bbb' ...
- [C#]为debug添加DebuggerDisplay属性
最近才发现,DebuggerDisplay 非常弓虽大,给类添加DebuggerDisplay属性后可以让调试变得更简单.如何使用? 1.定义一个有DebuggerDisplay的类:在类的头部添加& ...
- 洛谷P4726 【模板】多项式指数函数(多项式 exp)
题目 https://www.luogu.com.cn/problem/P4726 思路 (略) 是个板题,但是包含了很多多项式的基础板子,适合用来练手. 据说递归版的好写(好抄),但是我猜测和fft ...
- AttributeError: module 'openai' has no attribute 'ChatCompletion'的解决办法
原因 openai库版本过旧 解决办法(二选一) pip install -U openai 下载安装包放入你的项目根目录下, 改名格式zip为whl(即:openai-0.27.0-py3-none ...
- 恢复Gitee删除的文件
在Gitee仓库中删除了某文件,发现idea里面的该文件也没有了,恢复方法: 1.在diea中找到被删掉文件所在的文件夹右键. 2.点击Local History再点击Show History. 3. ...
- javaweb同一个项目打包两次放在同一个tomcat下
web.xml中配置: <context-param> <param-name>webAppRootKey</param-name> <param-value ...
- vue3 使用clodop打印插件实现不预览直接打印
一.下载安装C-LODOP https://www.lodop.net/download.html 解压文件后点击exe程序,启用服务 将上述的 LodopFuncs.js 文件放到工程某个文件下 二 ...