• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C与C++之间相互调用实例方法讲解

C与C++之间相互调用实例方法讲解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#调用c++dll实例,c++游戏开发实例,c++实例开发,linux c++项目实例,c++串口通信实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、导出C函数以用于C或C++的项目

如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言。如果是从C++语言模块使用,则用C链接声明这些函数。如果使用此技术并为DLL提供头文件,则这些函数可以原封不动地由C和C++模块使用。

以下代码演示可由 C 和 C++ 客户端应用程序使用的头文件:

__declspec( dllimport ) void MyCFunc();
__declspec( dllimport ) void AnotherCFunc();

#ifdef __cplusplus
}
#endif
</div>

MyCFunc()和AnotherCFunc()为C语言DLL的导出函数。

如果需要将C函数链接到C++可执行文件,并且函数声明头文件没有使用上面的技术,则在C++源文件中添加下列内容以防止编译器修饰C函数名:

该代码告诉编译器"MyCHeader.h"是C写的,不要修饰头文件中的C函数名,否则连接的时候会找不到。

2、导出 C++ 函数以用于C语言项目

如果在用C++编写的DLL中有希望从C语言模块访问的函数,应使用C链接而不是C++链接来声明这些函数。除非另外指定,C++编译器使用C++类型安全命名约定(也称作名称修饰)和C++调用约定(使用此调用约定从C调用会很困难)。

若要指定 C 链接,请在DLL中为函数声明指定 extern "C"。例如:

在C语言的函数中是无法直接调用C++代码的,如果要调用,可以做一个wrapper,例如call_Lib_CPPFunction,它的声明和实现如下:

// daFun才是我们C++代码的实现
void Lib::daFun(DataAttribute* dataAttribute)
{
    map<string, MMSINFO>::iterator it;
    // ...
}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#如何调用原生C++ COM对象详解
  • 实例解析C++中类的成员函数指针
  • 实例讲解C++设计模式编程中State状态模式的运用场景
  • C++中DeviceIoCteatol的用法实例
  • C++中CSimpleList的实现与测试实例
  • C++与C#互调dll的实现步骤
  • C++调用C#的DLL实现方法
  • C与C++之间相互调用实例方法讲解
  • c++获取进程信息列表和进程所调用的dll列表
  • 浅析C#与C++相关概念的比较

相关文章

  • 2017-05-28C++ vector删除符合条件的元素示例分享
  • 2017-05-28C++模板特例化应用实例
  • 2017-05-28让应用程序只运行一个实例的实现方法
  • 2017-05-28websocket++简单使用及实例分析
  • 2017-05-28C 语言简单加减乘除运算
  • 2017-05-28QString和char以及string之间的赋值详解
  • 2017-05-28解析linux 文件和目录操作的相关函数
  • 2017-05-28C++中用substr()函数消除前后空格的解决方法详解
  • 2017-05-28C语言指针应用简单实例
  • 2017-05-28计时器的time_t和clock_t 的两种实现方法(推荐)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C/C++实现矩阵的转置(示例代码)
    • static_cast,dynamic_cast,reinterpret_cast,const_cast的区别及用法详解
    • 常用的STL查找算法
    • c语言操作文本的基本使用方法
    • 探讨数组与字符串输入的问题(C++版)
    • C++归并排序算法实例
    • C语言位图算法详解
    • c语言实现多线程动画程序示例
    • 简要解读C++的动态和静态关联以及虚析构函数
    • C/C++函数调用栈的实现方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有