我正在使用 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
有一段时间,我正在使用记事本++和命令行编译。所以,更重要的是: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,它就可以工作。我不知道为什么,也许有人可以解释一下。