如何从另一个C ++ / CX WinRT组件中的ref类调用内部方法?

时间:2016-02-14 22:53:15

标签: windows-runtime c++-cx winrt-component

有没有办法在另一个C ++ / CX WinRT组件中使用来自ref class的native参数调用内部方法?我知道有一个解决方案通过指针暴露为int,但有没有更好的方法?有些东西喜欢包含来自其他lib的头文件而不使用托管引用(这样我收到了来自C#Component3&#34的错误消息;错误CS0433:类型' Class1'存在于' Component1&# 39;和'组件2'"在其他组件中消耗这两者)...

的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();
}

1 个答案:

答案 0 :(得分:0)

正确的方法是在定义Class1.h时添加标题Class2;通过添加对WinMD(元数据)的引用,编译器只知道public成员。添加标头允许编译器查看真正的C ++类型,包括internal成员。

如果没有代码的完整示例,您在收到标题时遇到的错误很难理解,尽管我最好的猜测是您有两个名称空间和对Class1的引用很暧昧。首先,您可以将Class1Class2放在相同的.h / .cpp文件中,以简化操作并完全避免使用外部标头引用。