저는 C#에서 사용할 혼합 모드 C++/CLI 클래스와 인터페이스를 사용하고 있습니다. 인터페이스는 다음과 같이 정의된다 :C++/CLI 인터페이스의 속성을 사용할 수 없습니다.
public interface class IMapRenderingInterfacer
{
...
property int CurrentCacheSize { int get(); };
...
};
구현 클래스는 헤더 파일이 선언이 있습니다
int MapRenderingInterfacer::CurrentCacheSize::get()
{
return (*_nativeMapRenderingInterface)->getCurrentCacheSize()/1000000;
}
:
public ref class MapRenderingInterfacer : public IMapRenderingInterfacer
{
...
public:
virtual property int CurrentCacheSize { int get(); }
...
};
그리고 속성의 구현을 CPP 파일에
오류 또는 경고없이 컴파일하지만 C# 클래스에서이 속성을 사용하려고하면 다음 오류가 발생합니다.
오류 CS1061 'IMapRenderingInterfacer'에 'CurrentCacheSize'에 대한 정의가없고 'IMapRenderingInterfacer'유형의 첫 번째 인수를 허용하는 확장 메서드 'CurrentCacheSize'를 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?)
이 인터페이스에는 C#에서 정상적으로 사용할 수있는 여러 가지 메서드가 있지만이 속성에는 포함되어 있지 않습니다.
아이디어가 있으십니까?
당신은 관리 속성 ('CurrentCacheSize')을 선언했지만 일반적인 원시 메소드 ('MapRenderingInterfacer :: CurrentCacheSize :: get()')를 구현했습니다. 관리되는 클래스가 네이티브 리소스에 액세스하고 포인터에 네이티브 클래스 인스턴스화를 저장하고 호출을 전달하려는 경우 ([방법 : C++/CLI에서 속성 사용] (https://msdn.microsoft.com/en-us)을 참조하십시오. /library/2f1ec0b1.aspx)). 그게 당신이하려고하는 경우, 귀하의 속성 구현에 올바른 구문을 사용해야합니다. (또한 인터페이스가 가상 속성을 선언하지 않습니다. 의도적입니까?) – IInspectable
입력 해 주셔서 감사합니다! 실제로 웹 페이지를 참조 용으로 사용했습니다. 특히 "가상 속성"예제는 여기에 설명 된 헤더 파일 대신 cpp에 구현을 유지해야합니다. https://social.msdn.microsoft .com/Forums/vstudio/en-US/6b272758-9f8c-412f-912b-27a841e18ee2/ccli-syntax-for-h-implement-it-in-cpp-? 포럼 = vclanguage – tseval
기본 사항 괜찮습니다. 따라서 C# 프로젝트에 이전 버전의 C++/CLI 어셈블리에 대한 참조가 있다는 것만 확실합니다. 참조를 선택하고 속성 창에서 표시된 경로를보고 날짜를 확인하십시오. 그리고 두 솔루션 모두 동일한 솔루션에 포함시켜야하며 C# 프로젝트가 프로젝트 참조를 사용하므로 잘못 될 수 없습니다. –