本文介绍了具有抽象基返回类型的托管C ++包装器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试围绕非托管库创建一个托管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 ++包装器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 19:48