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

有时候我们为了调用系统底层的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)


关键是:%

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值