winforms - C++ CLI KeyDown::raise 错误 error C3767 候

我有一个包含三个实体的场景:

  • 带有一个方法 stub 的接口(interface)
  • 继承自 `System::Windows::Forms::NativeWindow` 并实现接口(interface)
  • 的类
  • 具有类类型的私有(private)成员和接口(interface)类型的公共(public)属性的包装类。该类还有一个“KeyDown”事件成员,该成员将从窗口类
  • 中调用/引发。

    这些是我正在使用的文件:

    INativeWindow.h
    #pragma  once
    public interface class INativeWindow
    {
        void Nothing();
    };
    

    CLINativeWindow.h
    #pragma  once
    ref class NWHolder;
    public ref class CLINativeWindow : System::Windows::Forms::NativeWindow, INativeWindow
    {
    public:
        NWHolder^ Parent;
        virtual void  Nothing() sealed;
        void DoIt();
    };
    

    CLINativeWindow.cpp
    #include "stdafx.h"
    #include "CLINativeWindow.h"
    
    void CLINativeWindow::Nothing()
    {
        Console::Write("None");
    }
    void CLINativeWindow::DoIt()
    {
        Parent->KeyDown(this, nullptr);
    };
    

    NWHolder.h
    #pragma  once
    #include "INativeWindow.h"
    #include "CLINativeWindow.h"
    
    public ref class NWHolder
    {
    
    internal:
        event System::Windows::Forms::KeyEventHandler^ KeyDown;
    public:
        virtual property INativeWindow^ OwnNativeWindow
        {
            INativeWindow^ __clrcall get() sealed;
            void __clrcall set(INativeWindow^ value) sealed; 
        }
    
    private:
        CLINativeWindow^ nativeWindow_;
    };
    

    NWHolder.cpp
    #include "stdafx.h"
    #include "NWHolder.h"
    
    
    INativeWindow^ NWHolder::OwnNativeWindow::get()
    {
        return nativeWindow_;
    }
    
    void NWHolder::OwnNativeWindow::set(INativeWindow^ value)
    {
        nativeWindow_ = dynamic_cast<CLINativeWindow^>(value); 
    }
    

    编译时间,我得到这个错误:Error 1 error C3767: 'NWHolder::KeyDown::raise': candidate function(s) not accessible ..\NativeWindows\CLINativeWindow.cpp 10
    有什么可以做的吗?我什至尝试过#pragma make_public(System::Windows::Forms::KeyEventHandler)但它失败了。

    最佳答案

    C++/CLI 事件的“raise”内部方法总是声明为 protected 。在 NWHolder 上添加一个名为“FireKeyDownEvent”的方法,并为其提供您喜欢的任何可访问性。

    关于winforms - C++ CLI KeyDown::raise 错误 error C3767 候选函数不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11364370/

    相关文章:

    c# - 通用 - 编译器警告 CS0693 或错误

    c++ - C++模板泛型(模板参数列表)

    compiler-errors - 为什么 'dsgaudiko'有效的PHP?

    android - 从现有代码创建新项目

    c# - “does not contain a static '主要' method”错误

    node.js - 编译 Node 给出 “No-old-style-declaration”标志错

    c# - 'System.Data.Objects.ObjectContext'不包含带有0个参数的

    f# - 编译错误提示值不是函数

    c# - 排序列表>,错误: InvalidOperati

    boost - 使用复合键从 multi_index_container 中删除每个键的元素