互いに相互作用するネイティブオブジェクトがいくつかあります。
ここで、これらのオブジェクトの一部をマネージ クラスにラップしました。しかし、ネイティブのラップされたオブジェクトを取得しなければならない場合があります。
たとえば、次のオブジェクトを取り上げます。
これは、Sessions オブジェクトを作成するネイティブ クラスです。
private class SessionFactory : public ISessionFactory {
public:
~SessionFactory() {};
SessionFactory(MessageEventHandler* handler) : m_handler(handler) {};
/// Creates an instance of a Session,
/// using the given message handler.
inline Session* createSession(const IMessageDispatcher* dispatcher) {
Session* s = new Session(dispatcher);
s->AddMsgHandler( m_handler );
return s;
};
private:
MessageEventHandler* m_handler;
};
これは、ネイティブ MessageEventHandler オブジェクトをラップするマネージ クラスです。
public ref class NetMessageEventHandler {
public:
NetMessageEventHandler() {
m_NativeHandlerPtr = new MessageEventHandler();
}
const MessageEventHandler* GetNativeObject() const;
private:
MessageEventHandler* m_NativeHandlerPtr;
};
さて、次の NetMessageDispatcher では、前のそれぞれとやり取りする必要があります。
public ref class NetMessageDispatcher {
public:
NetMessageDispatcher(MessageEventHandler^ handler) {
m_Dispatcher = new MessageDispatcher( new SessionFactory(handler->GetNativeObject()) );
}
private:
MessageDispatcher* m_Dispatcher;
}
このアプローチは正しいですか、それとも他のベスト プラクティスがありますか?