3

多数のクラスをラップする C++/CLI プロジェクトがあります。クラスには独自のメタデータ システムがあります。そこで、動的オブジェクトを返して、C# でいくつかのユース ケースを簡単にしたいと考えています。しかし、C++ でこれを行う方法がわかりません。

C# では、次のように記述できます。

dynamic TestThisOut()
{
    return null;
}

void mork()
{
    var d = TestThisOut();
    d.Fork();
}

C++/CLI で書きたいTestThisOut()ので、上記の「mork」関数とまったく同じように使用できます (つまり、dynamic キーワードを入力する必要はありません)。これは可能ですか?

4

2 に答える 2

4

C++/cli で動的オブジェクトを作成できますが、C# プロジェクトの場合のようにそこで使用することはできません。ただし、C# から使用できます。方法は次のとおりです。

C++/CLI で、 Object^を返すプロパティまたはメソッドを作成します。このプロパティまたはメソッドをSystem::Runtime::CompilerServices::DynamicAttributeでマークします。準備できた。

ここに私が作成した簡単なサンプルがあります:

namespace ClassLibrary1 
{
    using namespace System;
    using namespace System::Dynamic;

    public ref class Class1 : public DynamicObject
    {
    public:
        [System::Runtime::CompilerServices::Dynamic]
        static property Object^ Global
        {
        public:
            Object^ get()
            {
                return gcnew Class1();
            }
        }

    public:
        String^ Test()
        {
            return "Test";
        }
    };
}

そして私のC#コンシューマ:

Console.WriteLine( ClassLibrary1.Class1.Global.Test() );
于 2013-03-28T15:10:38.320 に答える
2

動的は C# 4.0 のキーワードです。C++ CLI (およびVB.NETでも) ではサポートされていません。

C++ CLI で動的オブジェクトを使用する場合は、impromptu-interfaceライブラリを使用できます。サポートされているオプションのリスト。情報はこの質問からです

于 2012-05-14T04:28:24.017 に答える