【发布时间】:2014-10-03 04:36:00
【问题描述】:
我正在使用 RCF (http://www.deltavsoft.com/RCF.html) + protobuf (https://code.google.com/p/protobuf/) 进行远程函数调用(嵌入式 linux 服务器 + windows 客户端)。 我的问题与 windows 客户端有关。
我在客户端使用 MinGW 和 Qt 5.3.1,但我不能使用 QtCreator:如果将 RCF 源代码添加到 INCLUDEPATH,它会不断失败。看起来这是已知问题,但尚未解决: https://bugreports.qt-project.org/browse/QTCREATORBUG-12890?page=com.googlecode.jira-suite-utilities:transitions-summary-tabpanel
有一段时间,我正在使用 notepad++ 和命令行编译。所以,更重要的是:RCF 有两种方式来执行远程调用——同步和异步。 Syncronous 目前还可以。异步是可以的......除了一种情况。
我有很多绑定回调的函数:
void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
//code here is no matter
}
绑定,根据 RCF 示例:
RCF::Future<int> fRet;
fRet = client->anyOfMyFunctions(
RCF::AsyncTwoway( boost::bind(&p347ClientWrapper::onAsyncFunctionCompleted, this, fRet, if_code) ),
any_parameter_of_my_function);
“客户端”是 RcfClient
大部分功能运行正常。但其中一个(看起来和其他人一样)导致
pure virtual method called
terminate called without an active exception
它发生在回调附近的某个地方(我猜想),因为这个调用是在服务器端正常处理的。我想,这个“纯虚拟”隐藏在 RCF 类的某个地方。不幸的是,我找不到方法,如何调查此案……
更新:
突然找到了治疗方法,但还是不完全明白原因。
让我们看看RCF定义:
RCF_METHOD_R1(int,doStartRotChannel_fixed,const channel_manager::RotChannelInitParams &)
效果很好
RCF_METHOD_R1(int,doStartRotChannel_orig,channel_manager::RotChannelInitParams &)
导致“调用纯虚方法”
所以,如果我将参数声明为 const ,它就可以工作。我不知道为什么,也许有人可以解释一下。
【问题讨论】:
标签: c++ qt mingw protocol-buffers rcf