介绍
之前已经解决了,在Go中调用C函数方法,及在C内调用Go函数方法
但是今日在调用QT内方法的时候发现,所有方法都是封装在类对象中的.
且有些对象无法传递出来,私有对象,私有函数,只能内部调用.
比如:想在Go里面调用QT的QMessageBox弹出个提示框怎么办
// C
// 第一步,全部对象
Doors * w;
// C
// 这里初始化了全局对象(new)
extern "C" int start()
{
int argc = 0 ;
char *argv[] = {};
QApplication a(argc, argv);
w = new Doors();
w->init();
w->show();
return a.exec();
}
// C
// 第二步,当然在你的 QWidget 对象中定义一个方法
void Doors::message(const char * _message)
{
QMessageBox::about(this, tr("提示"), tr(_message));
}
// C
// 第三部,在外面定义一个供Go调用的方法
extern "C" void message(void * p)
{
w->message((char*)p);
}
// Go
// 第四步,Go内声明
/*
extern void message(void *);
*/
// #include <stdio.h>
// #include <stdlib.h>
// #cgo LDFLAGS: -L./ -ldoors -framework QtGui
import "C"
import "unsafe"
// Go
// 第五步,当然是调用了
// 提示,一定要在 start() 之后使用哦,也就是(new)后.
C.message(unsafe.Pointer(C.CString("您如输入命令不支持!")))