2016-02-14 3 views
-1

Есть ли способ вызвать внутренний метод с собственным параметром из класса ref в другом компоненте C++/CX WinRT? Я знаю, что есть решение с помощью указателей, открытых как int, но есть ли лучший способ? Кое-что нравится включать заголовочные файлы из другой библиотеки и не использовать управляемую ссылку (так я получил сообщение об ошибке с C# Component3 «ошибка CS0433: тип« Class1 »существует как в« Component1 », так и« Component2 »» в другом компоненте, который потребляет эти оба) ...Как вызвать внутренний метод из класса ref в другом компоненте C++/CX WinRT?

Component1/Class1.h:

public ref class Class1 sealed 
    { 
    internal: 
     bool InternalMethodForComponent2(NativeType& param1); 

    public: 
     Class1(); 
     virtual ~Class1(); 

     int SomeMethodForComponent3(); 
    private: 

    }; 

Component2/class2.cpp:

//#include "Component1/class1.h" - replaced by adding reference because of CS0433 in Component3 

void Class2::SomeMethod(Class1^ obj) 
{ 
    NativeType nt; 
    nt.start = 1; 

    ... 

    obj->InternalMethodForComponent2(nt); //does not work - error C2039: 'InternalMethodForComponent2' : is not a member of 'Component1::Class1' 
} 

Component3/class3.cs:

void MethodInClass3() 
{ 
    Class1 obj1 = new Class1(); 
    Class2 obj2 = new Class2(); 

    obj2.SomeMethod(obj1); 
    var res = obj1.SomeMethodForComponent3(); 
} 
+0

Довольно маловероятно, чтобы получить компилятор C# при компиляции кода C++/CX. Этот вопрос не имеет большого смысла. – IInspectable

+0

Эта ошибка C# относится к компоненту 3, который ссылается на компоненты C++/CX WinRT 1 и 2. Что конкретно не имеет смысла? – wallycz

+0

Я только вижу код для 1 класса. –

ответ

0

Правильный способ заключается в том, чтобы включать заголовок Class1.h при определении Class2; добавив ссылку на WinMD (метаданные), компилятор знает только о членах public. Добавление заголовка позволяет компилятору увидеть истинный тип C++, включая членов internal.

Ошибки вы получили, когда вы включили заголовок трудно понять без полного примера кода, хотя моя догадка, что у вас были два пространства имен и ссылка на Class1 была неоднозначной. Для начала вы можете просто поставить Class1 и Class2 в те же файлы .h/.cpp, чтобы упростить и избежать ссылки на внешний заголовок.