2010-12-10 14 views
0

Visual Studio 2008でネイティブDLLのManaged C++(/ clr)にラッパーDLLを作成しています。 このラッパーDLLは.NETプログラミング言語、 C#のようなものです。.NET DLLのManaged C++の明示的なキャスト演算子

私はSystem :: Stringへの明示的キャスト演算子の実装に問題があります。 キャスティングはManaged C++テストプログラムでは動作しますが、C#テストプログラムでは動作しません。

これは私がC#プログラムで取得エラーです:

error CS0030: Cannot convert type 'Field' to 'string' 

は、ここで私はそれをやった方法の簡易版です。

public ref class Field 
{ 
private: 
    FieldNative* nativeObj; 

public: 
    Field() 
    { 
     nativeObj = new FieldNative(); 
    } 

    ~Field() 
    {   
     delete nativeObj; 
    } 

    explicit operator System::String^(void) 
    {  
     const char* value = (const char*) *nativeObj; 
     return gcnew System::String(value, 0, nativeObj->size()); 
    } 
}; 

ネイティブオブジェクトは、constのchar型にキャストを実装*ので、これは動作します。私は別の管理されたC++プログラムでそれを使用することもできます。 しかし、C#では動作しません。

これは、プロパティはVS2008のオブジェクトブラウザにさらされている方法です。

Field.explicit operator string() 

public explicit operator string() 
Member of Field 

それはC#や他の.NET言語で利用可能であるので、どのように私はマネージドC++での明示的なキャスト演算子を実装する必要がありますか?

答えて

2

C#では、演算子を静的にする必要があります。それを動作させるために、このようにそれを書く:

static explicit operator System::String^(Field^ obj) 
    {  
     // etc.. 
    } 
+0

あなたのコードは、C#のコード –

+0

@Saeedではありません - いいえ、それはC++/CLI、OPが使用している言語です。 –

+0

ありがとう、ハンス!あなたの提案はうまくいきます。 –

関連する問題