c# - 如何在 C++/CLI 中包装 C++ 接口(interface)(抽象类)?

标签 c# visual-c++ c++-cli interop native

我有一些 C++ 代码:

namespace Compute {   
  class __declspec(dllexport) IProgressCB {   
  public:     
    virtual void progress(int percentCompleted) = 0;   
  };    
  double __declspec(dllexport) compute(IProgressCB *progressCB, ...); 
}

我需要从 C# 调用。
因此我想用 C++/CLI 包装这个 C++ 代码。

我了解如何包装 compute() 函数, 但是如何包装 IProgress 接口(interface)?

(.Net类好像不能继承C++类?)

最佳答案

使用一个 ref 类,它持有一个指向包装实例的指针:

namespace ComputeCLI {
    public ref class IProgressCB{
    public:
        void progress(int percentCompleted)
        {
            // call corresponding function of the wrapped object
            m_wrappedObject->progress(percentCompleted);
        }

    internal:
       // Create the wrapper and assign the wrapped object
       IProgressCB(Compute::IProgressCB* wrappedObject) 
            : m_wrappedObject(wrappedObject){}

        // The wrapped object
        Compute::IProgressCB* m_wrappedObject;
    };

    public ref class StaticFunctions{
    public:
        static double compute(IProgressCB^ progressCB, ...){
            Compute::compute(progressCB->m_wrappedObject, ...);
        }
    };
}

关于c# - 如何在 C++/CLI 中包装 C++ 接口(interface)(抽象类)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489902/

相关文章:

c++ - 为什么这个程序被三个 C++ 编译器错误地拒绝了?

c++ - 找不到 opencv_highgui230.dll

c# - 用于使用 C#、C++/CLI 和非托管 C++ 的应用程序的内存分析工具

c# - 无法将属性 'Property' 中的值转换为类型 'System.Windows.DependencyProperty' 的对象

c# - 在wpf中的用户控件内分配DataGrid的itemsSource

c# - 使用 SqlBulkCopy 时如何检索服务器生成的标识值

c++ - 在 Windows 8 上使用 Media Engine 播放音乐

C# DateTime.ParseExact 为 "2012-09-03T06:35:31Z"

c++ - 如何从 C++ 代码暂停 FFmpeg?

c# - 将 MSDN 示例从 C# 转换为 C++/CLI