用于.NET DLL的Managed C ++中的显式强制转换操作符

时间:2010-12-10 09:41:50

标签: c# .net dll wrapper managed-c++

我正在使用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语言中使用?

1 个答案:

答案 0 :(得分:2)

C#要求运营商是静态的。写这样就可以了:

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