C++调用C程序

C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误。要解决这个问题,就要在 C++文件里面显示声明一下哪些函数是C写的,要用C的方式来处理。
1.引用头文件前需要加上 extern “C”,如果引用多个,那么就如下所示
extern “C”
{
#include “ s.h”
#include “t.h”
#include “g.h”
#include “j.h”
};
然后在调用这些函数之前,需要将函数也全部声明一遍。
2.C++调用C函数的方法,将用到的函数全部重新声明一遍
extern “C”
{
extern void A_app(int);
extern void B_app(int);
extern void C_app(int);
extern void D_app(int);

}

C++程序中调用被c编译器编译后的函数,为什么要加extern "C"?

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个C 函数的声明如下:
void foo(int x, int y);
该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。例如:
extern “C”
{
void foo(int x, int y);
// 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
// 其它C 头文件
}
这就告诉C++编译译器,函数 foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我们可以用#include 直接引用这些头文件。

C++调用LabVIEW生成的程序或与其交互,可以通过以下几种方式实现: 1. **使用LabVIEW的C语言接口**:LabVIEW允许生成C语言兼容的代码,可以通过调用这些代码来实现C++与LabVIEW的交互。具体来说,可以使用LabVIEW的`Call Library Function Node`来调用外部C库,从而实现从LabVIEW调用C++代码的功能。反之,也可以通过LabVIEW生成的C代码来调用LabVIEW程序。 2. **使用NI VeriStand进行集成**:通过NI VeriStand,可以从C++环境中导入控制算法、仿真模型和其他任务。尽管使用VeriStand不需要任何编程知识,但是可以通过LabVIEW、ANSI C/C++、ASAM XIL以及其他建模和编程软件环境对其进行自定义和扩展[^1]。 3. **利用LabVIEW的ActiveX自动化服务器**:如果LabVIEW应用程序支持ActiveX自动化,那么可以通过C++编写客户端代码来调用LabVIEW程序。这种方式需要LabVIEW程序作为服务端提供相应的接口。 4. **通过文件或网络通信**:另一种方法是通过文件读写或者网络通信的方式,将C++程序的数据传递给LabVIEW程序处理,或者从LabVIEW程序获取数据。这种方式较为间接,但适用于某些特定场景。 5. **使用NI的接口工具**:NI提供了多种工具和技术,使得C++能够与LabVIEW进行交互。例如,可以通过使用LabVIEW的API来创建、管理和控制LabVIEW应用程序的执行。 对于具体的实现细节,需要根据实际的应用需求和技术条件来选择合适的方法。例如,如果目标是将LabVIEW程序作为C++应用程序的一部分来调用,那么可能需要使用到LabVIEW的C语言接口或者通过NI VeriStand进行集成[^2]。 ### 示例代码 假设我们想要通过C++调用一个由LabVIEW生成的C函数,这里是一个简单的示例代码: ```cpp #include <iostream> extern "C" { // 假设这是从LabVIEW导出的C函数 void labviewFunction(int input); } int main() { int inputValue = 42; labviewFunction(inputValue); // 调用LabVIEW生成的C函数 return 0; } ``` 请注意,上述示例假设已经有一个从LabVIEW导出的C函数,并且该函数已经被正确地链接到了C++项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值