2012-03-15 6 views
1

私はC++/CLIの初心者です。仮想メソッドを使用して管理されていないC++クラスをどのようにラップして管理し、C#からそのクラスを使用できるのかを知りたいですか?C++/CLI:管理対象の仮想メソッドを使用してアンマネージクラスをラップする方法、およびC#のメソッドを使用する方法

アンマネージC++クラス:

class IProgression 
{ 
public: 
    virtual ~IProgression(void) {} 
    virtual void sendProgression(int amount, int present) = 0; 
}; 

sendProgression方法がC#の層への進捗情報を送信するために使用されます。コールバックです。

私はこの進行コールバックが設定されている他のアンマネージドC++クラスがあります。

virtual void setProgression(IProgression * pIProgression) = 0; 

だから私はC++/CLI経由で管理されていないCの++へのC#からのコールバックインターフェイスを設定するとアンマネージCからバックのC#への進行情報を取得する必要がありますが++ C++/CLI経由で。

私はこれと混同しているので、誰かがこれを実装する方法をアドバイスできますか?

public interface IManagedProgression { 
    void SendProgression(int amount, int present); 
}; 

public class Wrapper : public IProgression { 
public: 
    Wrapper(IManagedProgression^ c) 
    { 
     callBack = c; 
    } 


    void sendProgression(int amount, int present) 
    { 
     callBack->SendProgression(amount, present); 
    } 

private: 
    gcroot<IManagedProgression^> callBack; 
}; 

あなたはその後、C#でIManagedProgressionまたは別の言語を実装し、ラッパーオブジェクトでラップすることができます

答えて

2

あなたのような何かを行うことができます。

+0

すぐに回答いただきありがとうございます。この場合、Wrapperクラスをrefクラスとして定義する必要はないのですか?あなたの提案を実装し、IManagedProgressionをC#側に実装しました。私はまだそのインターフェイスをWrapperオブジェクトにラップするのが難しいです。私はそれをどのようにすることができますか?私はほとんどそこにいる。 – tonsten

+0

おそらく、管理対象側は、インターフェイスではなくイベントを使用する必要があります。しかし、これも機能します。 –

+0

この提案はC#側から正しく使用されるべきですか? – tonsten

関連する問題