问题描述
我正在尝试围绕非托管库创建一个托管C ++包装器
,其中包含C ++代码。
一些非托管方法返回一个返回类型是抽象的
基类型(例如unmanagedObject)。如何将此转换为
托管抽象基类?
希望有人可以帮助我
Thanx
I am trying to create an Managed C++ Wrapper around an unmanaged library
which contains C++ code.
Some of the unmanaged methods returns an returntype which is of the abstract
base type (for example unmanagedObject). How can i convert this to the
managed abstract basetype?
Hope somebody can help me
Thanx
推荐答案
这样的事情:
__gc class SomeClass
{
UnmanagedObject * pobj;
// ...
public:
UnmanagedObject * GetUnmanagedObject(){return pobj; }
// ...
};
What about something like this:
__gc class SomeClass
{
UnmanagedObject *pobj;
// ...
public:
UnmanagedObject *GetUnmanagedObject() { return pobj; }
// ...
};
如果你真的写了一个包装器,那么你的课应该是这样的:
public __gc Wrapper:public IDisposable
{
public:
Wrapper(){pNative = new NativeClass;)
int WrapperFunction1(...){return pNative-> Function1(...);}
void WrapperFunction2(...){return pNative-> Function2 (...);}
void Dispose()(删除pNative;);
private:
NativeClass * pNative;
};
(当然,有时你需要做一些编组......)
现在,如果它返回对象本身,你只需要创建一个新的
Wrapper类实例(你也必须确保调用
正确删除):
public __gc Wrapper:public IDisposable
{
public:
Wrapper(){pNative = new NativeClass;)
int WrapperFunction1(...){return pNative-> Function1(...);}
void WrapperFunction2(...){return pNative-> Function2(...);}
void Dispose()(删除pNative;);
// *以下内容非常重要!*
Wrapper * Function3 {返回新包装器(pNative-> Function3());}
private:
// *以下内容非常重要!*
Wrapper (NativeClass * pRef){pNative = pRef;}
NativeClass * pNative;
};
-
问候
Jochen
关于Win32和.NET的博客
如果你真的写了一个包装器,那么你的类应该是这样的:
public __gc包装:public IDisposable
公开:
Wrapper(){pNative = new NativeClass;)
int WrapperFunction1(...){return pNative-> Function1(.. 。);}
void WrapperFunction2(...){return pNative-> Function2(...);}
void Dispose()(删除pNative;);
私有:
NativeClass * pNative;
};
(当然,有时你需要做一些编组......)
现在,如果它返回对象本身,你只需要创建一个新的Wrapper类实例(你也必须确保调用
正确的删除函数):
public __gc Wrapper :public IDisposable
{
公开:
Wrapper(){pNative = new NativeClass;)
int WrapperFunction1(...){return pNative-> Function1(... );} void WrapperFunction2(...){return pNative-> Function2(...);}
void Dispose()(删除pNative;);
// *以下是很重要的!*
Wrapper * Function3 {返回新包装(pNative-> Function3());}
私人:
// *以下内容很重要!*
Wrapper(NativeClass * pRef){pNative = pRef;}
NativeClass * pNative;
};
-
问候
Jochen
我关于Win32和.NET的博客
这篇关于具有抽象基返回类型的托管C ++包装器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!