具有抽象基返回类型的托管C ++包装器 [英] Managed C++ wrapper with abstract base return types
问题描述
我正在尝试围绕非托管库创建一个托管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屋!