我正在使用Visual Studio 2012,使用C ++ Native Library并为它创建C ++ / CLI包装。
在this回答后,我有一个类,其函数在C ++中返回静态实例,如下所示:
MyCppClass.h
class MyCppClass
{
private:
MyCppClass(std::string name);
~MyCppClass(void);
public:
static const MyCppClass& MyInstance1();
static const MyCppClass& MyInstance2();
};
MyCppClass.cpp中的实例方法
#include "MyCppClass.h"
const MyCppClass& MyCppClass::MyInstance1()
{
static const MyCppClass instance1("Instance1Name");
return instance1;
}
const MyCppClass& MyCppClass::MyInstance2()
{
static const MyCppClass instance2("Instance2Name");
return instance2;
}
我的C ++代码运行正常。现在我正在构建一个C ++ / CLI包装器,因此可以从C#访问所有这些功能。
我按照这种方式构建所有包装器: 我的Managed类包含一个指向非托管类的指针,我在适当的时候创建实例,并在析构函数上销毁它。我将来自C#的参数编组到C ++并使用C ++中的逻辑。
我想在C#中使用MyCppWrapper的静态实例,就像我在C ++中使用它们一样。我希望C ++ / CLI能够引用C ++的静态实例。
你是如何做到这一点的?
我尝试了不同的东西,但大多数都不会建造,最后我得到了这个:
MyWrapper.h
public ref class MyWrapper
{
private:
const MyCppClass * internalInstance;
MyWrapper(const MyCppClass * internalInstance);
~MyWrapper(void);
static const MyWrapper^ instance1;
public:
property static const MyWrapper^ Instance1
{
const MyWrapper^ get();
}
MyWrapper.cpp
MyWrapper::~MyWrapper()
{
//Should I delete the pointer??
}
MyWrapper::MyWrapper(const MyCppClass* instance)
{
internalInstance= instance;
}
const MyWrapper^ MyWrapper::Instance1::get()
{
if(instance1== nullptr)
{
instance1 = gcnew MyWrapper(&(MyCppClass::Instance1()));
}
return instance1;
}
这是我正在尝试做的正确方法吗?
我应该怎么处理 const MyCppClass * internalInstance; 指针,我认为我不能销毁它,因为它不是用new创建的,我可能搞砸了。