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または別の言語を実装し、ラッパーオブジェクトでラップすることができます
すぐに回答いただきありがとうございます。この場合、Wrapperクラスをrefクラスとして定義する必要はないのですか?あなたの提案を実装し、IManagedProgressionをC#側に実装しました。私はまだそのインターフェイスをWrapperオブジェクトにラップするのが難しいです。私はそれをどのようにすることができますか?私はほとんどそこにいる。 – tonsten
おそらく、管理対象側は、インターフェイスではなくイベントを使用する必要があります。しかし、これも機能します。 –
この提案はC#側から正しく使用されるべきですか? – tonsten