托管C++函数定义输出参数(ref)
2013-02-22 13:35
886 查看
有时候我们为了调用系统底层的API,为UI(C#)提供服务,那么要以把这些方法放在托管工程中(CLR),这样既可以调用API,又可以供.NET上层使用,这的确是一个很好的方法,CLR工程就像是一个桥梁,连接C++与.NET?
但有时候会有这么一个问题:在托管工程中的方法,如何声明输出参数?
举个例子:
有这样一个函数:
在托管C++可以写成:
但是,从metadata中可以看到的函数原型是:
那么要如何定义出一个类似C#的ref的托管C++函数呢?
方法如下:
在C#这边看到的原形就是:
关键是:%
但有时候会有这么一个问题:在托管工程中的方法,如何声明输出参数?
举个例子:
有这样一个函数:
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/C++ 变长参数 (自己定义类似printf的函数)
- 定义一个圆类(Circle),私有数据成员为半径(radius)、圆周长和面积,共有成员函数为输入半径;计算周长、面积;输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在
- 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数
- 以指针或reference为参数的C++函数定义与调用对照表
- C++中定义函数参数默认值
- C/C++学习之C提高----C数组的定义、类型、定义数组指针变量、多维数组的本质、多维数组做函数参数、将两个数组中的字符串copy到第三个数组
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C++第十周【任务2】定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。
- C++ :函数中无需改变传入参数的值时,定义时把 “Item & x ” 都改成 \"const Item & x\"
- Python3基础 定义无参数无返回值函数 调用会输出hello world的函数
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C++程序设计实验报告(二十)---实现冒泡排序算法,并将之定义为一个函数,其中参数是指向数组的指针变量
- 函数调用,C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C++中函数中参数和返回值都是用户定义类型(这里主要是类的情况时的分析)
- C++关于函数声明和定义中参数赋值为0调用问题演示
- 定义一个函数,函数有两个整型参数,函数的功能是计算并输出两个参数之间的奇数个数 和 偶数和。
- 重学C++ 002定义带参数的成员函数
- C/C++中默认参数在哪指定?函数声明还是定义?默认参数需放在右边
- c/c++函数不定参数定义