通过 cli 包装器在 c# 中调用 c++ 代码
Call c++ code in c# by a cli wrapper
我有一个 c++ 代码需要在 c# 中由 cli 包装器调用。我卡在运算符重载部分了。
//这是我的代码
//Cppclass.h
#ifdef CPP_EXP_EXPORTS
#define CPP_EXP __declspec(dllexport)
#else
#define CPP_EXP __declspec(dllimport)
#endif
class CPP_EXP Cppclass;
CPP_EXP Cppclass operator-(Cppclass const &, Cppclass const &);
class CPP_EXP Cppclass
{
public:
friend CPP_EXP Cppclass operator-(Cppclass const &, Cppclass const &);
};
//这是我的托管 C++ 代码。
#include "Cppclass.h"
namespace Wrapper
{
public ref class cppwrapclass
{
public:
static cppwrapclass ^ operator-(cppwrapclass%A,cppwrapclass%B)
{
operator-(A.obj,B.obj);
return gcnew cppwrapclass();
}
private:
Cppclass *obj;
};
}
它显示了一个智能感知错误并且没有被编译。
你这样写一个包装器:
public ref class cppwrapclass
{
public:
cppwrapclass(Cppclass *obj)
: obj(obj)
{
}
~cppwrapclass()
{
this->!cppwrapclass();
}
!cppwrapclass()
{
if (obj)
{
delete obj;
obj = nullptr;
}
}
static cppwrapclass^ operator-(cppwrapclass% A, cppwrapclass% B)
{
return gcnew cppwrapclass(new Cppclass(*A.obj - *B.obj));
}
private:
Cppclass* obj;
};
A.obj
是 Cppclass*
类型,因此 *A.obj
是 Cppclass
类型,而 *A.obj - *B.obj
是临时 Cppclass
需要被移动到堆中以便被包装器引用,因此复制构造函数调用:new Cppclass(*A.obj - *B.obj)
.
剩下的是 Dispose
模式和终结器管道代码。
我有一个 c++ 代码需要在 c# 中由 cli 包装器调用。我卡在运算符重载部分了。
//这是我的代码 //Cppclass.h
#ifdef CPP_EXP_EXPORTS
#define CPP_EXP __declspec(dllexport)
#else
#define CPP_EXP __declspec(dllimport)
#endif
class CPP_EXP Cppclass;
CPP_EXP Cppclass operator-(Cppclass const &, Cppclass const &);
class CPP_EXP Cppclass
{
public:
friend CPP_EXP Cppclass operator-(Cppclass const &, Cppclass const &);
};
//这是我的托管 C++ 代码。
#include "Cppclass.h"
namespace Wrapper
{
public ref class cppwrapclass
{
public:
static cppwrapclass ^ operator-(cppwrapclass%A,cppwrapclass%B)
{
operator-(A.obj,B.obj);
return gcnew cppwrapclass();
}
private:
Cppclass *obj;
};
}
它显示了一个智能感知错误并且没有被编译。
你这样写一个包装器:
public ref class cppwrapclass
{
public:
cppwrapclass(Cppclass *obj)
: obj(obj)
{
}
~cppwrapclass()
{
this->!cppwrapclass();
}
!cppwrapclass()
{
if (obj)
{
delete obj;
obj = nullptr;
}
}
static cppwrapclass^ operator-(cppwrapclass% A, cppwrapclass% B)
{
return gcnew cppwrapclass(new Cppclass(*A.obj - *B.obj));
}
private:
Cppclass* obj;
};
A.obj
是 Cppclass*
类型,因此 *A.obj
是 Cppclass
类型,而 *A.obj - *B.obj
是临时 Cppclass
需要被移动到堆中以便被包装器引用,因此复制构造函数调用:new Cppclass(*A.obj - *B.obj)
.
剩下的是 Dispose
模式和终结器管道代码。