我使用RCF (http://www.deltavsoft.com/RCF.html) + protobuf (https://code.google.com/p/protobuf/)进行远程函数调用(embedded + windows )。我的问题与windows客户端有关。
我对客户端使用了MinGW和QT5.3.1,但我不能使用QtCreator:如果将RCF源代码添加到INCLUDEPATH,它就会经常失败。看起来这是已知的问题,但尚未解决:https://bugreports.qt-project.org/browse/QTCREATORBUG-12890?page=com.googlecode.jira-suite-utilities:transitions-summary-tabpanel
有一段时间,我使用notepad++和命令行编译。因此,更重要的是: RCF有两种执行远程调用的方法--同步调用和异步调用。同步现在还可以。同时代没事的..。除了一个案子。
我有许多函数绑定到回调:
void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
//code here is no matter
}根据区域合作框架的例子,绑定:
RCF::Future<int> fRet;
fRet = client->anyOfMyFunctions(
RCF::AsyncTwoway( boost::bind(&p347ClientWrapper::onAsyncFunctionCompleted, this, fRet, if_code) ),
any_parameter_of_my_function);"client“是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,它就能工作。我不知道为什么,也许有人能解释。
发布于 2014-10-03 08:06:10
来自C++03组: 13.1-3
包含在参数类型规范中的const类型说明符和易失性类型说明符非常重要,可用于区分重载函数声明。
定义中的const类型说明符使它完全成为编译器的另一个重载函数,在这种情况下,假定的虚拟方法没有实现。
https://stackoverflow.com/questions/26173337
复制相似问题