У меня есть класс C++/CLI смешанного режима и интерфейс, который я хочу использовать с C#. Интерфейс определяется следующим образом:Невозможно использовать свойства из интерфейса C++/CLI
public interface class IMapRenderingInterfacer
{
...
property int CurrentCacheSize { int get(); };
...
};
Класс реализации имеет это заявление в своем заголовочном файле:
public ref class MapRenderingInterfacer : public IMapRenderingInterfacer
{
...
public:
virtual property int CurrentCacheSize { int get(); }
...
};
и осуществление собственности в файле CPP:
int MapRenderingInterfacer::CurrentCacheSize::get()
{
return (*_nativeMapRenderingInterface)->getCurrentCacheSize()/1000000;
}
Это компилируется без ошибок или предупреждений, но когда я пытаюсь использовать это свойство из класса C#, я получаю следующую ошибку:
Ошибка CS1061 «IMapRenderingInterfacer» не содержит определения для «CurrentCacheSize» и не используется метод расширения «CurrentCacheSize», принимающий первый аргумент типа «IMapRenderingInterfacer» (вам не хватает директивы использования или ссылки на сборку?)
Этот интерфейс также содержит ряд методов, которые я могу использовать только отлично от C#, но не это свойство.
Любые идеи?
Вы объявили управляемое свойство (CurrentCacheSize'), но реализовали простой собственный метод (MapRenderingInterfacer :: CurrentCacheSize :: get() '). Если вы хотите, чтобы ваш управляемый класс обращался к собственным ресурсам, сохраните указатель на экземпляр собственного класса и переадресацию вызовов (см. Также [Как использовать свойства в C++/CLI] (https://msdn.microsoft.com/en-us /library/2f1ec0b1.aspx)). Если это то, что вы пытались сделать, обязательно используйте правильный синтаксис в реализации вашего свойства. (Кроме того, ваш интерфейс не объявляет виртуальное свойство. Это намеренно?) – IInspectable
Спасибо за ввод! Я фактически использовал эту веб-страницу в качестве ссылки, особенно пример «Виртуальные свойства», только то, что мне нужно сохранить реализацию в cpp вместо файла заголовка, который я нашел здесь: https://social.msdn.microsoft .com/Форумы/vstudio/en-US/6b272758-9f8c-412f-912b-27a841e18ee2/ccli-syntax-for-declaring-property-in-h-implementation-it-in-cpp-? forum = vclanguage – tseval
Основы все в порядке, поэтому единственное очевидное объяснение заключается в том, что ваш проект C# имеет ссылку на старую версию сборки C++/CLI. Выберите ссылку и посмотрите на отображаемый путь в окне «Свойства», проверьте его дату. И убедитесь, что оба проекта находятся в одном решении и что ваш проект C# использует ссылку на проект, чтобы это не пошло не так. –