您的位置:首页 > 编程语言 > C语言/C++

托管C++函数定义输出参数(ref)

2013-02-22 13:35 886 查看
有时候我们为了调用系统底层的API,为UI(C#)提供服务,那么要以把这些方法放在托管工程中(CLR),这样既可以调用API,又可以供.NET上层使用,这的确是一个很好的方法,CLR工程就像是一个桥梁,连接C++与.NET?

但有时候会有这么一个问题:在托管工程中的方法,如何声明输出参数?

举个例子:

有这样一个函数:

GetTimeStampFormat_r(UINT &FontSize,
CString &FontName,
COLORREF &FontColor,
UINT &Xpos,
UINT &Ypos,
BOOL &SolidBack,
COLORREF &BackColor)

在托管C++可以写成:

GetTimeStampFormat_r(UInt32& fontSize,
String^& fontName,
Color& fontColor,
UInt32& Xpos,
UInt32& Ypos,
bool& solidBack,
Color& backColor)

但是,从metadata中可以看到的函数原型是:

uint* fontSize,
string* fontName,
Color* fontColor,
uint* Xpos,
uint* Ypos,
bool* solidBack,
Color* backColor)
这显然不是我们希望的,因为要尽可能在C#这一层去用不安全代码,如指针。

那么要如何定义出一个类似C#的ref的托管C++函数呢?

方法如下:
GetTimeStampFormat_r(unsigned% fontSize,
String^% fontName,
Color% fontColor,
unsigned% Xpos,
unsigned% Ypos,
bool% solidBack,
Color% backcolor)

在C#这边看到的原形就是:

GetTimeStampFormat_r(ref uint fontSize,
ref string fontName,
ref Color fontColor,
ref uint Xpos,
ref uint Ypos,
ref bool solidBack,
ref Color backColor)


关键是:%
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++
相关文章推荐