具有抽象基返回类型的托管C ++包装器 [英] Managed C++ wrapper with abstract base return types

查看:64
本文介绍了具有抽象基返回类型的托管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

推荐答案

WithPit写道:
WithPit wrote:
我正在尝试创建一个托管C ++包装器非托管库
包含C ++代码。

一些非托管方法返回一个具有抽象基类型的返回类型(例如unmanagedObject)。我如何将其转换为
托管抽象基类?
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?



这样的事情:


__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; }

// ...
};


Hi WithPit!
Hi WithPit!
我正在尝试围绕一个包含C ++代码的非托管库创建一个托管C ++包装器。

一些非托管方法返回一个具有抽象性的返回类型
基类型(例如unmanagedObject)。我如何将其转换为
托管的抽象基类?
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?




如果你真的写了一个包装器,那么你的课应该是这样的:


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的博客
http://blog.kalmbachnet.de/


Jochen,伟大而清晰的例子!如果function2要返回以下原生/非管理类型,你能否展示如何进行编组




class MyClass

{

public:

...

char * myStr;

CPoint myPoint;

int myInt;

...

CPoint getPoint();

}


另外,在它的时候,从包装器中,你怎么能从

返回一个.NET字符串,说实际返回char *,tchar *,w_char *或
$ b $的本机函数4 b什么?


Thx !!!


/ Tommy


" Jochen Kalmbach [ MVP] QUOT; <无******************** @ holzma.de> skrev i

meddelandet新闻:eH ************** @ TK2MSFTNGP15.phx.gbl ...
Jochen, great and clear examples! Can you please show how to do marshalling
if function2 were to return the following native/unmanaged type:

class MyClass
{
public:
...
char* myStr;
CPoint myPoint;
int myInt;
...
CPoint getPoint();
}

Also, while at it, from the wrapper, how can you return a .NET String from
say native function4 that actually returns char*, tchar*, w_char* or
whatever?

Thx!!!

/Tommy

"Jochen Kalmbach [MVP]" <no********************@holzma.de> skrev i
meddelandet news:eH**************@TK2MSFTNGP15.phx.gbl...
Hi WithPit!
Hi WithPit!
我正在尝试围绕一个包含C ++代码的非托管库创建一个托管C ++包装器。

一些非托管方法返回一个返回类型,它是
抽象基类型(例如unmanagedObject)。如何将其转换为
托管抽象基类?
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?



如果你真的写了一个包装器,那么你的类应该是这样的:

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的博客
http://blog.kalmbachnet。 de /



这篇关于具有抽象基返回类型的托管C ++包装器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆