Я использую RCF (http://www.deltavsoft.com/RCF.html) + protobuf (https://code.google.com/p/protobuf/) для удаленного вызова функций (встроенный сервер linux + клиент Windows). Моя проблема связана с клиентом Windows.Remote Call Framework и чистый виртуальный метод где-то
Я использую 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 имеет два способа выполнения удаленных вызовов - синхронный и асинхронный. На данный момент синхронно. Asyncronous в порядке ... кроме одного случая.
У меня есть много функций, которые связываются с обратным вызовом:
void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
//code here is no matter
}
Binding, согласно примерам 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 &)
причины "чисто виртуальный метод, называемый"
Так что, если я объявляю параметр как сопзЬ, она работает , Я не знаю, почему, может быть, кто-то может объяснить.