我正在使用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现在可以。 Asyncronous是可以的......除了一种情况。
我有很多的功能结合到回调:
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类的某个地方。不幸的是,我不能找到一种方法,如何进行调查的情况下...
UPDATE:
突然,我已经找到了治愈,但还是不完全了解的原因。
让我们来看看RCF定义:
RCF_METHOD_R1(int,doStartRotChannel_fixed,const channel_manager::RotChannelInitParams &)
它工作正常
RCF_METHOD_R1(int,doStartRotChannel_orig,channel_manager::RotChannelInitParams &)
原因 “纯虚方法被称为”
所以,如果我声明参数作为常量,它的工作原理。我不知道为什么,也许有人可以解释。