托管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);

 

关键就是:%

posted @ 2022-08-01 13:15  unicornsir  阅读(319)  评论(0编辑  收藏  举报