qt和外部c程序通信问题

qt和外部c程序通信问题,第1张

1. 使用共享内存,两个不同进程访问这个内存区,A进程把buf数据存放到共享内存中,B进程直接访问读取。

2. 写一个TCP通信,A进程把buf数据通过socket,发送到B进程。B进程接收到数据数据后,进行后续 *** 作。

C source file的实现。

#include "obj.h"

int main(const int argc, const char **argv){

void *temp_obj = getObj(100)

printString(temp_obj)//实现C语言调用QT/C++UI界面

return (0)

}

写一个C++ source file和c source file都可以共同包含的头文件,如下所示。

#include <stdint.h>

#ifdef __cplusplus

class Obj{

public:

Obj(int32_t a=50)

~Obj()

std::string toString()

private:

int32_t k

}

#endif

#ifdef __cplusplus

extern "C" {

#endif

void* getObj(int32_t a)

void destroyObj(void *obj)

void printString(void *obj)

#ifdef __cplusplus

}

#endif

C++ source file的实现,其中C语言函数是供C source file调用的。

#include <iostream>

#include <sstream>

#include <iomanip>

#include <stdint.h>

#include "obj.h"

Obj::Obj(int32_t a){

k = a <<1

}

Obj::~Obj(){

/* don't really need to do anything here */

/* k = 0 only for example purposes */

k = 0

}

std::string Obj::toString(){

std::ostringstream os

os <<"Obj is currently: " <<this->k <<std::endl

return os.str()

}

void* getObj(int32_t a){

Obj *out = new Obj(a)

return ((void*)out)

}

void destroyObj(void* obj){

delete (((Foo*)obj))

}

void printString(void *obj){

std::string s = ((Obj*)obj)->toString()

std::cout <<s

}

Makefile

make file的实现。

CC ?= gcc

CXX ?= g++

CFLAGS = -O0 -g

CXXFLGS = -00 -g

OBJ = main obj

OBJS = $(addsuffix .o,$(OBJ))

all:

make compile

compile:

make $(OBJS)

make objexe

fooexe: $(OBJS)

$(CXX) -o fooexe $(OBJS)

main.o: main.c

$(CC) -c -o main.o main.c

obj.o: obj.cpp

$(CXX) -c -o obj.o obj.cpp

clean:

rm -rf $(OBJS) objexe *.dSYM

具体调试自己弄吧……

下面是我觉得的问题:

1、在实现operator=()时没有考虑自我赋值的情况(不严密,但不影响此次实验结果)

2、input()函数中不能保证name被正确赋值

3、while((c=getchar())!='\n'||i<n) //输入空格键或超过最大商品数则停止输入。这句话矛盾,安根据我的理解,将或运算改为与运算

4、 for(int j=0j<=ij++) //遍历对象数组,输出商品信息。循环结束的条件错误,比如i==n成立时,则循环内a[j]会超出范围

5、while(tag)循环内里面的语句:其一、将c=getchar()放到第一个 if 前面,因为c这个变量后面还需要用到,或者删除第二个if 中的c=getchar(),将其改为c==027;其二,ESC的ASCII码不是十进制的27吗?027代表八进制的27,不是ESC,自己查表再看一下吧

建议:

1、适用C++提供的类string来代替字符串,比如string name

2、减少不必要的注释

3、耐心加仔细


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7758093.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存