首页 未命名正文

linux编程_C语言挪用C++类成员函数的方式

云返利网 未命名 2020-05-26 09:07:55 11 0

最近做了一个wav花样的音频播放器,界面部分用Qt实现,中间层代码使用C语言实现,这就涉及到C和C++相互挪用的问题。

C++挪用C语言的方式在另一篇文章中已经说明(见 http://www.linuxidc.com/Linux/2016-11/137072.htm),C挪用C++的方式现做如下先容。

音频播放的时刻中间层代码需要将音频的播放进度和状态等信息反馈给界面程序举行显示,然则主程序是用c++写的,通过接口函数挪用c中间层代码举行响应操作并完成响应的功效,因此中间层c代码并不能自动将参数反馈给主线程,怎么办? 通过函数指针实现。

首先,在c代码中声明一个函数指针,和一个以函数指针类型为参数的接口函数。

void (*fset)(int value);
void finit( void (*f)(int value))
{
    fset = f;
}当c++挪用此函数时,将需要被c语言挪用的函数 看成参数传递给c并赋值给全局函数指针,这样在c中挪用 fset(int value);就可以实现c++函数的功效。

然则,要想实现c语言修改c++类成员的功效,还需要将此函数声明为友元

class A{
public:
    A();
  ~A();
  friend void set(int value);
}

A * pa; //声明一个全局的A类工具

A::A(){
pa = this;  //在A的组织函数中将this指针传递给pa
}

void set(int value){
pa->--------    //通过pa指针修改类成员属性
}

最后,在Qt图形界面响应控件下 挪用c语言函数 void finit(void (*f)(int value )) 并把 set()友元函数看成参数传递给c语言

finit(set);

然后再c语言中挪用 fset(value)  就可以将 value 传递给c++代码处置

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)