2016-09-16 3 views
2

У меня есть класс 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#, но не это свойство.

Любые идеи?

+0

Вы объявили управляемое свойство (CurrentCacheSize'), но реализовали простой собственный метод (MapRenderingInterfacer :: CurrentCacheSize :: get() '). Если вы хотите, чтобы ваш управляемый класс обращался к собственным ресурсам, сохраните указатель на экземпляр собственного класса и переадресацию вызовов (см. Также [Как использовать свойства в C++/CLI] (https://msdn.microsoft.com/en-us /library/2f1ec0b1.aspx)). Если это то, что вы пытались сделать, обязательно используйте правильный синтаксис в реализации вашего свойства. (Кроме того, ваш интерфейс не объявляет виртуальное свойство. Это намеренно?) – IInspectable

+0

Спасибо за ввод! Я фактически использовал эту веб-страницу в качестве ссылки, особенно пример «Виртуальные свойства», только то, что мне нужно сохранить реализацию в 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

+1

Основы все в порядке, поэтому единственное очевидное объяснение заключается в том, что ваш проект C# имеет ссылку на старую версию сборки C++/CLI. Выберите ссылку и посмотрите на отображаемый путь в окне «Свойства», проверьте его дату. И убедитесь, что оба проекта находятся в одном решении и что ваш проект C# использует ссылку на проект, чтобы это не пошло не так. –

ответ

1

Hans Passant было правильно! Это была просто ссылка на проект, которая указывала на неправильную версию сборки смешанного режима. Удаление и добавление ссылки снова в проекте сделали трюк!

Смежные вопросы