转自:http://blog.csdn.net/life_is_too_hard/article/details/52137271
c和c++不能直接相互调用,主要是因为c++有重载函数的功能,为了区分重载函数,编译器会在函数名上加上一些修饰用符号,而c不这么做。为了让c与c++的程序能够相互调用对方的库,就有了extern “C”。注意,extern “C” 是c++的规范,所以只能出现在c++的代码里面,加在函数声明前,表示函数是用c的规范。
1.c代码调用c++dll
编译c++dll的要点
- 供c调用的c++的函数接口不能包含c++特有的东西。
- 在编译生成供c代码调用的dll时,头文件的中的函数声明前要加上extern “C” 告诉编译器按照c规范处理函数名。
- 编译完成后,提供给c使用的头文件里面不能包含extern “C”,可以使用宏开关解决,也可以重新写个头文件。
c代码调用c++dll的要点
- 和正常调用c函数一样
2.c++调用c语言dll
编译c预言 dll的要点
- c语言dll正常编写,不需要做额外处理
c++调用c语言dll的要点
- 在包含c的头文件或声明来自c的函数时需要加上extern "C", 建议这么做
总结,不管谁调用谁,c代码不需要特殊处理,只要在c++代码的正确位置加上extern ”C" 即可。