C++/命令行界面 : How wrap unmanaged class with virtual methods to managed and use that from C#?

标签 c++ callback c++-cli unmanaged managed

我是 C++/CLI 的新手,我想知道如何使用虚拟方法包装非托管 C++ 类,以便从 C# 管理和使用它?

非托管 C++ 类:

class IProgression
{
public:
    virtual ~IProgression(void) {}
    virtual void sendProgression(int amount, int present) = 0;
};

sendProgression方法用于向C#层发送进度信息。所以是回调。

我有其他非托管 C++ 类,其中设置了此进度回调:

virtual void setProgression(IProgression * pIProgression) = 0;

所以我需要通过 C++/CLI 设置从 C# 到非托管 C++ 的回调接口(interface),并通过 C++/CLI 将进度信息从非托管 C++ 返回到 C#。

既然我对此有点困惑,有人可以提供如何实现的建议吗?

最佳答案

你可以这样做:

public interface IManagedProgression {
    void SendProgression(int amount, int present);
};

public class Wrapper : public IProgression {
public:
   Wrapper(IManagedProgression^ c)
   {
       callBack = c;
   }


   void sendProgression(int amount, int present)
   {
       callBack->SendProgression(amount, present);
   }

private:
   gcroot<IManagedProgression^> callBack;
};

然后您可以用 C# 或其他语言实现 IManagedProgression 并将其包装在 Wrapper 对象中。

关于C++/命令行界面 : How wrap unmanaged class with virtual methods to managed and use that from C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715913/

相关文章:

javascript - 如何调用一个只传递到另一个函数两次的函数?

c++ - 接受 0 个参数并返回类型可转换为 int 的未知类方法回调

opencv - 如何将Emgu::CV::Mat转换为OpenCV cv::Mat,反之亦然?

c# - 从非托管 C++ 到 C# 的回调有效,但仅在调试器中有效

c++ - ns2的c++代码中的节点在哪里处理数据包?

c++ - 在 C++ 中处理许多 commnadline 选项

c++ - 连接 QTreeWidgetItem 时出错

C++:重新排序原子存储(发布)和加载(获取)

Javascript - 如何从 JSON 数组 (URL) 创建变量?

c# - 为什么 C# 不允许像 C++ 这样的非成员函数