- 1、本文档共2页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
由C++生成C接口函数库的方法
1、在VisualC++中创建动态链接库工程。
2、函数声明方式为:__declspec(dllexport)voidfunction();
加入__declspec(dllexport)的作用是提示编译器myfunction()函数为dll文件
的输出函。同样道理,定义dll输出变量也应在声明前加
__declspec(dllexport)。
3、欲使输出函数按照C语言标准编译需要加入extern“C”.如下:
extern“C”{
__declspec(dllexport)voidfunction1();
__declspec(dllexport)voidfunction2();
__declspec(dllexport)voidfunction3();
__declspec(dllexport)voidfunction4();
注意”C”这里的C必须是大写的。
这里详细说明extern“C”{}的作用。
首先,需要了解的是C++和C函数编译方式的差异,由于C++里面支持函数的重
载,因此编译出来的.obj或者库文件里面,函数名会被加上和参数有关的签名,
用来区分同样函数名参数不同的函数。然而C语言不支持重载,所以函数名里
面没有这样的签名。
这样,当C语言的程序调用C++写成的库的时候,就会找不到函数。
比如,一个函数叫voidfoo(intbar)之类的,可能会在c++编译成叫foo_i之类
的名字,而在c语言里面就会编译成foo,这样c语言的程序去找foo就会找不
到,这样连接的时候会出错。
为了解决这个问题,引入了extrnc{},在这个的作用域之内,c++的函数名
不会加上参数签名,和c语言的标准保持统一,就兼容c语言的程序了。
4、接口函数不能存在C++支持而C不支持的形参。如std::string等。生成的库
可以像C语言链接库一样被使用。
可以采用以下模板
//mylib.h
#defineEXPORT_API__declspec(dllexport)
extern“C”{
EXPORT_APIvoidfunction1();
EXPORT_APIvoidfunction2();
}
//mylib.cpp
#include“mylib.h”
EXPORT_APIvoidfunction1()
{
}
EXPORT_APIvoidfunction2()
{
}
您可能关注的文档
- 理正结构常用表格.pdf
- 理解SVPWM坐标变换公式本质.pdf
- 生产主管如何进行工作改善 课后测试答案.pdf
- 甘薯WRKY基因家族序列的分离与鉴定.pdf
- 生产技术科采矿工程师安全生产责任制(通用版).pdf
- 生产安全事故报告和处理制度及整改记录.pdf
- 生产线自动化过程存在问题探究.pdf
- 生产厂房规章制度(共22页).pdf
- 生产部车间内容每日巡查表.pdf
- 生产计划员个人简历范文.pdf
- 安琪酵母-市场前景及投资研究报告:盈利开启新周期,全球领航新征程.pdf
- ETF投资分析报告:基于富国指数基金的多资产多策略组合.pdf
- 交通运输行业市场前景及投资研究报告:民航市场边际改善,红利稳健配置价值.pdf
- 中国功能饮料行业市场前景及投资研究报告:场景化消费驱动线下增长.pdf
- 传媒行业市场前景及投资研究报告:长视频平台动漫网播.pdf
- 医药行业市场前景及投资研究报告:ASCO,中国创新药口头报告数量.pdf
- 第23课《全民族浴血奋战与抗日战争的胜利》课件.pptx
- 第8课《现代社会的移民和多元文化》PPT课件.pptx
- 第8课《现代社会的移民和多元文化》课件.pptx
- 第23课《全民族浴血奋战与抗日战争的胜利》PPT课件.pptx
文档评论(0)