C++/CLI的函数接收C#调用时的参数数据类型

C++/CLI的函数接收C#调用时的参数数据类型

(1)C++/CLI的函数可以接收来自C#调用时传递的各种数据类型的参数,包括单个数据和数组类型。参数为只读时
C#调用 CLI(托管) C++被调函数 *
单个数据值 直接按名传递 直接按名接收
按名传递给C++ 直接按名接收
数组数据 直接按名传递 array ^数组名 方式接收
(1)需要C#同时传递数组大小;
(2)无法直接传递C#的数组过去给C++,只能通过本地创建动态内存(或局部变量)复制内容,再传递 动态内存的地址给C++。 typename接收,还需有数组长度
字符串类型数据 直接按名传递 String ^ 形式直接接收
C#的string数据需转成本地cli的string后才可被C++接收(CLI可传指针或引用给C++) string
接收
字符串数组 直接按名传递 array< String ^> ^ 形式直接接收
(1)需要C#同时传递数组大小;
(2)无法直接传递C#的数组过去给C++,只能通过本地创建动态内存(或局部变量)复制内容,再传递动态内存的地址给C++。 string* 接收,还需有数组长度

(2)参数可以为只读和可写,对于后者,C#调用时有两种传递方式,对应不同的CLI接收方式:第一种为ref方式(要求无论单个数据还是数组数据,都已经初始化和分配数组空间):
C#调用ref out CLI(托管) % C++被调函数 *
单个数据 调用时:
“ref 变量名”方式传递实参 跟踪引用方式接收(type %name);
无法直接传递C#的数据指针过去给C++,只能通过本地创建动态内存(或局部变量)复制数据内容,再传递动态内存的指针给C++,等C++利用指针读取(或修改数据后),再用该指针将值赋值给C#传入的name变量进行返回。 指针方式接收(type name),按指针方式访问
数组数据 调用时:
“ref 数组名”方式传递实参 array ^%数组名 方式接收
(1)无法直接传递C#的数组过去给C++,只能通过本地创建动态内存复制内容,再传递 动态内存的地址给C++,等C++利用指针读取(或修改数据后),再用该指针将值赋值给C#传入的name变量。
(2)需提供数组大小。 type
name接收,还需有数组长度,按指针(或数组)方式访问
字符串类型数据 调用时:
“ref 变量名”方式传递实参 String ^ % name形式接收
传给C++的方式同(1) string* 接收
字符数组 调用时:
“ref 数组名”方式传递实参 array< String ^> ^ % name形式接收
(1)无法直接传递C#的数组过去给C++,只能通过本地创建动态内存复制内容,再传递 动态内存的地址给C++,等C++利用指针读取(或修改数据后),再用该指针将值赋值给C#传入的name变量。
(2)需提供数组大小。
传给C++的方式同(1) string* 接收,还需有数组长度

out方式:(无论单个数据还是数组数据,可以未初始化和分配数组空间)
C#调用ref out CLI(托管) % C++被调函数 *
单个数据 调用时:
“out 变量名”方式传递实参 [System::Runtime::InteropServices::OutAttribute] type %name;
无法直接传递C#的数据指针过去给C++,且只能在本地gcnew方法申请空间,并给其赋值以回传数据。
数组数据 调用时:
“out 数组名”方式传递实参 [System::Runtime::InteropServices::OutAttribute] array ^%数组名
无法直接传递C#的数据指针过去给C++,且只能在本地gcnew方法申请空间,并给其赋值以回传数据。
字符串类型数据 调用时:
“ref 变量名”方式传递实参 [System::Runtime::InteropServices::OutAttribute] String ^ % name
无法直接传递C#的数据指针过去给C++,且只能在本地gcnew方法申请空间,并给其赋值以回传数据。
字符数组 调用时:
“out 数组名”方式传递实参 [System::Runtime::InteropServices::OutAttribute] array< String ^> ^ % name
无法直接传递C#的数据指针过去给C++,且只能在本地gcnew方法申请空间,并给其赋值以回传数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值