【问题标题】:Interop between C++ classes inside an WinRT componentWinRT 组件内的 C++ 类之间的互操作
【发布时间】:2015-03-12 09:56:19
【问题描述】:

目前我正在开发一个 WinRT dll 组件,使用原生 C++ 来渲染 directx,并且喜欢在 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# c++ dll windows-runtime interop


    【解决方案1】:

    好的,我明白了...确实很简单,只需使用 internal 关键字!我之前尝试用这个关键字来解决这个问题,但只是在类级别上,这是不可能的,因为它是一个原生的 c++ 类。无论如何,当您使用 internal to members 时,一切都很好:

    internal:
        list<Line>* getRenderPoints();
    

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

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2014-05-04
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多