【问题标题】:subscribing to c# CompositeCommand from c++从 c++ 订阅 c# CompositeCommand
【发布时间】:2010-12-21 14:19:16
【问题描述】:

在 c# 程序集中,我有一个全局 prism CompositeCommand 可以像这样订阅:

private static readonly CompositeCommand __myCommand = new CompositeCommand();

public static CompositeCommand MyCommand
{
  get { return _myCommand; }
}

从 c# 我可以使用以下命令订阅此命令:

[...].MyCommand.RegisterCommand(new DelegateCommand<MyClass>((c) => c.Something()));

我的问题:我需要从托管 c++ 订阅命令,但我不知道如何在 DelegateCommand 中使用函数签名。大多数时候我会收到如下错误:

错误 C2664: 'Microsoft::Practices::Prism::Commands::DelegateCommand::DelegateCommand(System::Action ^)': 参数 1 从 'void (__clrcall *)(MyNameSpace::MyClass ^) 的转换' 在 'System::Action ^' 中是不可能的。

如何订阅 c# 命令?或者是否有其他方式来监听事件(我可以用不同的东西替换 CompositeCommand)。

谢谢!

【问题讨论】:

  • 您是尝试在托管/CLI C++ 还是本机 C++ 中处理命令?
  • 哦,对不起,托管 C++。如果没有 cli,我什至不会梦想尝试这个 ;)

标签: c# c++ events prism


【解决方案1】:

我将假设您正在使用托管 C++ - 其他任何东西,还有更大的问题需要担心。

您的 C# 类型似乎出现了链接错误。因此,我认为这个问题与 Prism 的任何问题无关。为了让 C++ 托管编译器链接到您的 C# 程序集,您需要使用 XML 文档文件生成 C# 程序集(请参阅属性中的“构建”选项卡)。你的项目中启用了吗?

我使用以下内容作为一个非常简单的概念证明,其中 TestObject 在 C++ DLL 引用的 C# 程序集中定义。这编译没有任何问题。

头文件:

 void __clrcall CommandCallback(Project::Infrastructure::TestObject^ param);

public ref class ManagedModule : IModule
{
public:
    ManagedModule();

     virtual void __clrcall Initialize();

private:
};

实施:

ManagedDLL::ManagedModule::ManagedModule()
{

}

void __clrcall ManagedDLL::ManagedModule::Initialize()
{
    Action<Project::Infrastructure::TestObject^>^ newAction = 
         gcnew Action<Project::Infrastructure::TestObject^>(&CommandCallback);
    DelegateCommand<Project::Infrastructure::TestObject^>^ newCommand = 
         gcnew DelegateCommand<Project::Infrastructure::TestObject^>(newAction);
    Project::Infrastructure::Commands::ApplicationExitCommand->RegisterCommand(newCommand);

    return;
}

void __clrcall CommandCallback(Project::Infrastructure::TestObject^ param)
{
    return;
}

【讨论】:

  • 是的,托管 c++(至少)。看起来不错,马上去看看!
  • 哇,它有效!非常感谢(我知道这应该是可能的,但不知道怎么做)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多