現在、一部のコードをネイティブ C++ からマネージ C++ (純粋) に移行中です。コードには、Windows Active Scripting との対話が含まれます。現在、私たちのネイティブ コードは、(ATL を使用して)「IDispatch」を実装する「ObjectDispatch」というクラスを提供します。このクラスの実装は、実行時に独自のネイティブ クラス「オブジェクト」にクエリを実行して、サポートするメソッドとプロパティを判断し、「IDispatch::Invoke」呼び出しをこの「オブジェクト」に転送します。
'IDispatch' をサポートする .NET COM 相互運用機能を使用した例を見てきましたが、これらの実装は IDL から派生したものか、.NET クラスの仕様に基づいたものであり、どちらも実行時に発生しません。
特定のクラスで次の属性を使用すると、.NET COM 相互運用機能がコンパイル時に「IDispatch」の実装を生成できるようです。
[ClassInterface(ClassInterfaceType::AutoDispatch)]
この属性をサポートするクラスを実行時に動的に生成できると想定しています。ただし、それを試みる前に、ネイティブ コードで使用されたのと同様の手段でこれを実現する方法について誰かアイデアを持っているかどうか疑問に思っています。
現時点では、'Object' クラスはネイティブ クラスのままであることに注意してください。