WinRT 组件内C++类之间的互操作

Interop between C++ classes inside an WinRT component

本文关键字:之间 互操作 C++ 组件 WinRT      更新时间:2023-10-16

目前我正在使用本机C++来渲染 directx 的 WinRT dll 组件,并且喜欢在 C# 项目中使用此组件。

这个想法是让一个类(例如 A)执行绘图并向 WinRT 公开相关的公共方法。这工作正常。但是现在我需要在 dll 项目中有一个帮助程序类 (B),在公共方法中使用用户定义的类型。该帮助程序类只需要在 dll 组件中可见,并且仅由 A 用作私有成员.不幸的是,此类 B 也向 WinRT 公开,这意味着我不能在公共方法中使用用户定义的类型/类。简而言之,我喜欢做这样的事情:

    public ref class A sealed
    {
        public:
            void addRenderData(float ...);
        private:
        B helper;
        ...
    }
    class B
    {
        public:
            void addMeasurement(MyOwnStruct* m);
            AnyC++Type doSomething();
        private:
        ...
    }

是否可以以某种方式声明我的帮助程序类 B,它只能在 dll 程序集(完全用 C++ 编写)中使用并摆脱"公共成员的签名包含本机类型"

我不喜欢生成一个额外的 c++ dll 来执行我的 WinRT 组件使用的计算的想法

有关此主题的任何帮助将不胜感激:-)

好的,我知道了...确实非常简单,只需使用内部关键字!我之前尝试过用这个关键字解决这个问题,但仅限于类级别,这是不可能的,因为它是一个本机 c++ 类。无论如何,当您使用内部成员时,一切都很好:

internal:
    list<Line>* getRenderPoints();

现在只有我的 DirectX 组件作为控件公开给 WinRT,在此之后,我可以在不同的 c++ 本机类中很好地实现逻辑