Q1:extern “C” 是做什么用的?

A1:一种情况是多个文件中,变量声明或者函数声明,需要extern “C”,这种情况在这里不做讨论。
  在dll工程中,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的,即把C++的函数用C这个方言表述出来,已达到C能看懂的目的。

Q2:C语言调用C++的dll,应该注意什么?

A2:  如extern“C”里面说的那样,如果C++编写的函数放在dll里面,不被extern“C”修饰的话,被C调用时,则C不认识,所以在C++工程里面声明时,要加extern“C”修饰,就像:

extern "C" __declspec(dllexport)   void IMVL_LoadModel(const char* model_filename, svm_model* model);
extern "C" __declspec(dllexport) void IMVL_Train(const char* data_filename, svm_model* model);
extern "C" __declspec(dllexport) void IMVL_Predict(svm_model* model, const double* problem, int DimNum, double* level);

  但是在调用时,则不需要extern“C”来修饰,参看下面网友的回复:

为了使c能调用c++写的dll。c++中使用extern "C"{ }修饰该接口即可
这个原因你应该知道吧。大概意思是告诉c++编译器这段代码用c编译器编译。编译之后的结果是c方式的而不是c++方式的。
但是c中不识别extern "C"。
综上两点,在dll头文件中常这样写,如下:
意思就是编译的时候编译成c方式。但是包含头文件时,因为是c调用所以会忽略掉extern "C"
#ifdef __cplusplus
extern "C"
{
#endif ... #ifdef __cplusplus
}
#endif

Q3:C++调用C工程的dll,应该注意什么?

A3:暂时没什么好注意的。

Q4:

A4:

VC++动态链接库(DLL)编程深入浅出:Q&A(原创)的更多相关文章

  1. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

  2. VC++动态链接库(DLL)编程深入浅出(四)

    这是<VC++动态链接库(DLL)编程深入浅出>的第四部分,阅读本文前,请先阅读前三部分:(一).(二).(三). MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用M ...

  3. VC++动态链接库(DLL)编程深入浅出(转帖:基础班)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  4. VC-基础:VC++动态链接库(DLL)编程深入浅出

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  5. VC++动态链接库(DLL)编程深入浅出

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  6. VC++动态链接库(DLL)编程深入浅出(一)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  7. VC++动态链接库(DLL)编程深入浅出(二)

    好,让我们正式进入动态链接库的世界,先来看看最一般的DLL,即非MFC DLL 上节给大家介绍了静态链接库与库的调试与查看,本节主要介绍非MFC DLL. 4.非MFC DLL 4.1一个简单的DLL ...

  8. VC++动态链接库(DLL)编程深入浅出(三)

    前面我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧. 另外,自从本文开始连载后,收到了一些读者的e-mail.有的读者提出了一些问题,笔者将在本文的最后一次连载中 ...

  9. VC++动态链接库(DLL)编程

    一.概论 1:http://www.pconline.com.cn/pcedu/empolder/gj/vc/0509/698632.html 2:http://pcedu.pconline.com. ...

随机推荐

  1. java移位运算符详解

    http://soft.chinabyte.com/database/195/11553695.shtml java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和 ...

  2. iTunes备份注意

    记住:     如果你有重要的信息在iTunes中无备份的话.那么开始不要同步了. 退出时,最好备份后在退出.

  3. 设计模式之Visitor模式(笔记)

    訪问者模式:表示一个作用于某个对象结构中的各元素操作.它使你能够不改变各元素的类的前提下定义作用于这些元素的新操作. 首先定义一个visitor抽象类,为每一个详细类声明一个visit操作 publi ...

  4. idea设置自定义图片

    看图操作哈: 1. 2. 逼格满满:

  5. centos部署Python环境

    在centos上部署Python之前,我们需要先配置开发环境. 1.安装Python依赖的开发工具包 gcc自然少不了,可以直接用“Development Tools”: yum grouplist ...

  6. android 怎样加速./mk snod打包

    mm命令高速编译一个模块之后,一般用adb push到手机看效果,假设环境不同意用adb push或模块不常常改.希望直接放到image里,则能够用./mk snod,这个命令只将system文件夹打 ...

  7. 小白学习python之路(一):安装python3

    引言 作为一个python小白,之前学的是java,不过听说python很流行,功能很强大,可以用很少的代码实现更强的功能,因此我也是被吸引了过来,并且把我的学习经历记录下来.     当然了,要学习 ...

  8. Newtonsoft.Json读取txt文件中json数据并存到SQL service 数据库!

    using System; using System.Collections.Generic; using System.Text; using System.IO; using Newtonsoft ...

  9. firfox浏览器常用快捷键

    Ctrl + 数字键来打开第N个标签页这种还要先数完再到键盘上找数字Ctrl + Page Up = 激活左边一个标签页Ctrl + Page Down = 激活右边一个标签页Ctrl + Tab = ...

  10. 安装Redis 非结构化数据库

    1.官网下载安装包 1)    首先在Redis官网下载安装包: http://redis.io/download(redis-4.0.9.tar.gz) 2.在/usr/local/创建一个redi ...