Я пишу DLL-оболочку в Managed C ++ (/ clr) для собственной библиотеки DLL с Visual Studio 2008. Эта DLL-оболочка будет использоваться для языков программирования .NET, таких как 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
Как мне реализовать явный оператор приведения в Managed C ++, чтобыэто можно использовать в C # или любом другом языке .NET?