0

我在 c++/CLI 中有一个非托管(即不是 ref 类)类,在 c++/CLI 中实现了一个接口。两者都在同一个文件 Wrapper.h 我只想导出接口并访问本机 c++ 中的方法实现(派生类)。我在 Gordon Hogenson 的《C++/CLI 基础》和 Nishant Shivakumar Sir 的《C++/CLI in ACtion》两本书中寻找了这种情况。有什么解决方法吗?

编辑 下面是我在 c++/CLI (Wrapper.h) 中的界面。CSharp (c#) 项目包含托管接口 ICalculateArea 和实现它的类 Circle。仅供参考... C# 项目正在成功构建

 #ifdef MANAGED_EXPORT
using namespace System;
using namespace CSharp;
#endif
#ifdef MANAGED_EXPORT
#define DLLAPI  __declspec(dllexport)
#else
#define DLLAPI  __declspec(dllimport)
#pragma comment(lib,"PATH.lib")
#endif



interface class IWrapper
{
  double CalculateArea(double value);
};

实现此接口的 ref 类如下::(Wrapper.cpp)

#include"Wrapper.h"
using namespace CSharp;
   ref class UnmanagedCircle:IUnmanagedCalculateArea
 {

 public:
     virtual double CalculateAreaWrapper()
    {
      ICalculateArea^ getArea=dynamic_cast<ICalculateArea^>(gcnew Circle) ;
      return getArea->CalculateArea();
    }
    virtual double GetRadiusWrapper() 
    {
        Circle^ circle=gcnew Circle();
        return circle->Radius;
    }
    virtual void SetRadiusWrapper(double value )
    {
        Circle^ circle=gcnew Circle();
        circle->Radius=value;
    }
 };

现在我想在不同的原生 c++ 项目中访问 CalculateArea 方法?

4

1 回答 1

0

我认为您不需要 C++/CLI ref 类层。您可以编写一个直接包装托管对象的本机类。例如:

class UnmanagedCircle
{
public:
    static double CalculateAreaWrapper()
    {
        ICalculateArea^ getArea=dynamic_cast<ICalculateArea^>(gcnew Circle);
        return getArea->CalculateArea();
    }

    static double GetRadiusWrapper() 
    {
        Circle^ circle=gcnew Circle();
        return circle->Radius;
    }

    static void SetRadiusWrapper(double value)
    {
        Circle^ circle=gcnew Circle();
        circle->Radius=value;
    }
};
于 2013-06-20T10:45:30.903 回答