1

私はICEスターターです。http://zeroc.comには、チャットの作成方法に関する優れたチュートリアルがあります。チュートリアルをベースとして使用することにしました。そして、私が最初にやろうとしたのは、与えられたc ++実装ではなく、c#でChatRoomクラスを作成することでした。私は自分のc#コードで同じことをしようとしました。C ++でのChatRoomの実装:

// C++
class ChatRoomCallbackAdapter { /* ... */ };
typedef IceUtil::Handle<ChatRoomCallbackAdapter> ChatRoomCallbackAdapterPtr;
class ChatRoom : public IceUtil::Shared
{
public:
    ChatRoom(bool trace, const Ice::LoggerPtr& logger);
    void reserve(const std::string&);
    void unreserve(const std::string&);
    void join(const std::string&, const ChatRoomCallbackAdapterPtr&);
    void leave(const std::string&);
    Ice::Long send(const std::string&, const std::string&);
private:
    typedef std::map<std::string, ChatRoomCallbackAdapterPtr> ChatRoomCallbackMap;
    ChatRoomCallbackMap _members;
    std::set<std::string> _reserved;
    IceUtil::Mutex _mutex;
    const bool _trace;
    const Ice::LoggerPtr _logger;
};

クラスメンバーの実装の一部:

// ...
void ChatRoom::reserve(const string& name)
{
    IceUtil::Mutex::Lock sync(_mutex);
    if(_reserved.find(name) != _reserved.end() ||
       _members.find(name) != _members.end())
    {
        throw string("The name " + name + " is already in use.");
    }
    _reserved.insert(name);
}
// ...

私は次に書いていました:

public class ChatRoom : IceUtil

エラーが発生したとき。配布パッケージのIceUtildllがCOMで表示されないため、c#プロジェクトで使用できないことがわかりました。

C++の代わりに何を使用できますか

IceUtil::Handle<T>

私が理解している限り、それはスマートポインターです。C#で指定されているようなサーバーを実装するにはどうすればよいですか?

上記のc++クラスと比較して、c#(ミューテックスについて話している)でも同じでしょうか?

public class ChatRoom
{
    // ...
    void Reserve(System.String Name)
    {
        lock(this)
        {
            // operations
        }
    }               
}


ありがとう!

4

2 に答える 2

4

ICEについては何も知りませんが、彼らのWebサイトには.NET実装がリストされています。C#を使用する場合は、COMの代わりに.NET実装を使用してみませんか?C#サーバーの例を含むドキュメントのセクションもあります。

于 2011-01-18T17:20:17.747 に答える
2

C ++は、すぐに使用できる参照カウントポインターをサポートしていません。そのため、C++APIにはIceUtil::Handle<>テンプレートがあります。C#は明らかにそれを必要としません。C ++ではなくC#の例を使用してC#用のIceの学習を開始することをお勧めします。デモパッケージdemocsのフォルダに多くのC#クライアント/サーバーの例があります。そしてもちろん、Iceは一種の代替品であることを除けば、テクノロジーとはまったく関係がありません。COM

于 2011-01-18T18:45:00.030 に答える