扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
C语言没办法直接调用C++库
目前成都创新互联已为数千家的企业提供了网站建设、域名、网络空间、成都网站托管、企业网站设计、察布查尔锡伯网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
要调用C++的库
必须加一层封装
即 先写一个C++文件, 对每个要调用的C++DLL中的函数func_name, 封装成
extern "C"
{
return_type func_name_C(list)
{
return func_name(list);
}
}
这样的形式。
然后 把这个c++文件, 封装成dll
C文件调用这个dll里面的函数, 间接调用原始DLL
导出函数,总体来说有两种方法,一种是添加一个def定义文件,在此文件中定义dll中要输出的函数;第二种是在源代码中待输出的函数前加上__declspec(dllexport)关键字。
关于使用DLL的资源
先LoadLibrary加载DLL
然后就可以用相关的函数调用其中的资源了。
1、新建DLLTest文件夹,在该文件夹中新建source文件夹。
2、在source文件夹中造add.c。
3、win+R+cmd请出总指挥“命令行”,输入。
4、继续输入(路径也要随机应变)link /DLL /out:E:\VCfile\DLLTest\source\add.dll E:\VCfile\DLLTest\source\add.obj。
5、新建源文件call_dll.c或.cpp放到DLLTest文件夹,同时add.dll也复制过来。
6、编译,连接运行出现个5。调用成功。
注意事项:
C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
dll里的函数列标一般只有函数名。函数原型从dll里一般不会反映出来。因为dll里面的函数通常都是按C语言导出的。
获取lib必须在知道函数原型的前提下(也就是说得通过其他途径知道你需要的函数的原型)。你可以自己写一个同名的dll,把你需要的这个dll里的函数都写进去,函数实现可以随便写。编译后会产生一个.lib,这个就是你需要的东西。
一.动态链接库(dll)结构
——dll中定义有两种函数:导出函数(export
function)和内部函数
(internal
function),导出函数可以被其他模块调用,内部函数只能在dll内部使用。我们在用c++定制dll文件时,需要编写的就是包含导出函数表的模块定义文件(.def)和实现导出函数功能的c++文件。下面以sample.dll为例介绍def文件和实现文件的结构:
——1.模块定义文件(.def)是由一个或者多个用于描述dll属性的模块语
句组成的文本文件,每个.def文件至少必须包含以下模块定义语句:
第一个语句必须是library语句,指出dll的名字。
exports语句列出被导出函数的名字。
可以使用description语句描述dll的用途(此句可选)。
";"对一行进行注释(可选)
——2.实现文件(.cpp文件为例)
——实现入口表函数的.cpp文件中,包含dll入口点处理的api函数和导出
函数的代码。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流