2

次のような .NET C++ 以外のクラスがあります。

フー.h:

namespace foo {
  const static std::string FOO;
  ...
}

Foo.cc:

using namespace foo;

const std::string FOO = "foo";

これを C# アプリケーションで使用するために公開したいのですが、次のことを試みると混合型に関するエラーが発生し続けます。

FooManaged.h:

namespace foo {
  namespace NET {
    public ref class Foo {
      public:
        const static std::string FOO;
    }
  }
} 

FooManaged.cc:

using namespace foo::NET;

const std::string Foo::FOO = foo::FOO;

アンマネージド文字列定数をマネージド文字列定数に変換する正しい方法は何ですか?

4

1 に答える 1

3

C++/CLI では、literalキーワードはstatic const、フル マネージド アプリケーションに公開されるインターフェイスに定数定義を含める場所の代わりに使用されます。

public:
    literal String^ Foo = "foo";

残念ながらliteral即値が必要なため、std::string値を使用することはできません。別の方法として、文字列を返す静的な読み取り専用プロパティを作成できます。

public:
    static property String^ Foo
    {
        String^ get()
        {
            return gcnew String(Foo::FOO.c_str()); 
        }
    }

個人的には、文字列をもう一度書き換えて使用literalする方が良いと思います。ただし、常に変化することを強く懸念している場合 (新しいバージョンなど)、プロパティはFOOネイティブ ライブラリのバージョンを使用します。

于 2009-11-22T11:23:28.243 に答える