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++での明示的なキャスト演算子を実装する必要がありますか?
あなたのコードは、C#のコード –
@Saeedではありません - いいえ、それはC++/CLI、OPが使用している言語です。 –
ありがとう、ハンス!あなたの提案はうまくいきます。 –