中央大学 小島 様。
お世話になっております。
産総研 栗原です。
一つ、気になった点があります。
> 警告内容は添付させていただきます。
> service.cpp 192は、m_request.push_back(tmpReply)に該当します。
と書いてありますが、m_requestは"std::vector< RQSVC_impl > m_ request;"
と宣言されておりますので、m_request.push_back()ではなく、
m_reply.push_back()の間違いではないでしょうか?
m_replyには何も入ってないようですので、Consumerの方でnilオブジェクト
に対してオペレーション呼び出しを試みてエラーになると思います。
ご確認の程、宣しくお願い致します。
> 中央大学の小島です。
> お世話になっております。
>
> 動的なサービスポートの追加および削除を行おうと思ったのですが、
> 警告がでながらもコンパイルは通りますが、実行しポートにアクセス
> するようなことを行うと、RTCLink上で赤くなってしまいます。
>
> その時には
> omniORB: ERROR -- the aplication attemped to invoke an operation on a
> nil reference
>
> 特に必要がない部分については省略しますが、
> ポートの追加はだいたい以下のように行いました。
>
> ---service.idl---
> interface RQ
> {
> void request();
> }
>
> interface RP
> {
> void reply();
> }
> ---serviceSVC_impl.h--
> RPSVC_impl
> {
> public :
> short flag(0);
> }
>
> ---service.h---
>
> long dynamicPortCounter
> std::vector m_ServicePort;
> std::vector< RQSVC_impl > m_ request;
> std::vector< RTC::CorbaConsumer > m_reply;
>
> ---service.cpp---
>
> void service::onInitialize(...){
> addport();
> }
>
> void service::onExecute(...)
> {
> for(unsigned long i(0);i {
> if(m_reply[i]->flag == 1) m_request[i].request();
> }
> }
>
> void service::addport()
> {
> std::string portName("IDServicePort");
> std::string requestName("requestID");
> std::string provideName("providerID");
>
> portName += otos(dynamicPortCounter);
> requestName += otos(dynamicPortCounter);
> provideName += otos(dynamicPortCounter);
>
> //provider port
> RQSVC_impl tmpRequest;
> m_request.push_back(tmpRequest);
>
> //consumer port
> RTC::CorbaConsumer tmpReply;
> m_request.push_back(tmpReply);
>
> //regist port
> m_ServicePort.push_back(new RTC::CorbaPort(portName.c_str()));
> m_ServicePort.back()->registerProvider(provideName.c_str()
> ,provideName.c_str() ,m_request.back());
> m_ServicePort.back()->registerConsumer(requestName.c_str)
> ,requestName.c_str() ,m_reply.back());
> }
>
> 警告内容は添付させていただきます。
> service.cpp 192は、m_request.push_back(tmpReply)に該当します。
>
> エラー内容から推測すると、接続しないでアクティブ化してしまったために、
> コンシューマーの実体が存在していないというエラーなのでしょうか?
>
> もし、仮にそうであれば、回避する方法もありますでしょうか?
>
> ご教授お願いいたします。
>
中央大学の小島です。
お世話になっております。
動的なサービスポートの追加および削除を行おうと思ったのですが、
警告がでながらもコンパイルは通りますが、実行しポートにアクセス
するようなことを行うと、RTCLink上で赤くなってしまいます。
その時には
omniORB: ERROR -- the aplication attemped to invoke an operation on a
nil reference
特に必要がない部分については省略しますが、
ポートの追加はだいたい以下のように行いました。
---service.idl---
interface RQ
{
void request();
}
interface RP
{
void reply();
}
---serviceSVC_impl.h--
RPSVC_impl
{
public :
short flag(0);
}
---service.h---
long dynamicPortCounter
std::vector m_ServicePort;
std::vector< RQSVC_impl > m_ request;
std::vector< RTC::CorbaConsumer > m_reply;
---service.cpp---
void service::onInitialize(...){
addport();
}
void service::onExecute(...)
{
for(unsigned long i(0);iflag == 1) m_request[i].request();
}
}
void service::addport()
{
std::string portName("IDServicePort");
std::string requestName("requestID");
std::string provideName("providerID");
portName += otos(dynamicPortCounter);
requestName += otos(dynamicPortCounter);
provideName += otos(dynamicPortCounter);
//provider port
RQSVC_impl tmpRequest;
m_request.push_back(tmpRequest);
//consumer port
RTC::CorbaConsumer tmpReply;
m_request.push_back(tmpReply);
//regist port
m_ServicePort.push_back(new RTC::CorbaPort(portName.c_str()));
m_ServicePort.back()->registerProvider(provideName.c_str()
,provideName.c_str() ,m_request.back());
m_ServicePort.back()->registerConsumer(requestName.c_str)
,requestName.c_str() ,m_reply.back());
}
警告内容は添付させていただきます。
service.cpp 192は、m_request.push_back(tmpReply)に該当します。
エラー内容から推測すると、接続しないでアクティブ化してしまったために、
コンシューマーの実体が存在していないというエラーなのでしょうか?
もし、仮にそうであれば、回避する方法もありますでしょうか?
ご教授お願いいたします。