我正在使用Visual Studio 2008在托管C ++(/ clr)中为本机DLL编写包装DLL。 此包装DLL将用于.NET编程语言,例如C#。
我在向System :: String实现显式转换运算符时遇到问题。 转换适用于托管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 ++中实现显式强制转换操作符,以便它可以在C#或任何其他.NET语言中使用?
答案 0 :(得分:2)
C#要求运营商是静态的。写这样就可以了:
static explicit operator System::String^(Field^ obj)
{
// etc..
}