Я пишу DLL-оболочку на управляемом C ++ (/ clr) для собственной библиотеки DLL с Visual Studio 2008. Эта 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?