我正在使用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 &)
原因 「純虛方法被稱爲」
所以,如果我聲明參數作爲常量,它的工作原理。我不知道爲什麼,也許有人可以解釋。