托管C++定义输出函数ref,关键就是:%
有时候我们为了调用系统底层的API,为UI(C#)提供服务,那么要把这些方法放在托管工程中(CLR),这样既可以调用API,又可以供.NET上层使用,
CLR工程就是连接C++与.NET的桥梁
有这样一个函数:
GetTimeStampFormat_r(UNIT &FontSize, CString& FontName, COLLORREF & FontColor, UNIT &xPos, UNIT &yPos, BOOL &SolidBack, COLOOREF &BackColor);
在托管C++可以写成
GetTimeStampFormat_r(UInt& fontSize, String^& fontName, Color&fontColor, UInt32& xPos, UInt32& yPos, bool& solidBack, Color& backColor);
但是,从metadata中可以看到的函数原型是:
unit *fontSize, string* fontName, 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 unit fontSize, ref string fontName, ref Color fontColor, ref uint xPos, ref uint yPos, ref bool solidBack, ref Color backColor);
关键就是:%