博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
阅读量:3522 次
发布时间:2019-05-20

本文共 1402 字,大约阅读时间需要 4 分钟。

在一文中提出了一下这个问题,特以此文进行回复,大家如果有不同意见和想法可以留言分享下。的问题如下:
----------------------------------------------------------------------------------------------
From 
楼主你好,最近遇到一个问题,就是在metro的开发中,想用c#调用C++ /CX写的DLL,
public ref class test_class sealed{public:void fun(int a, int& b,int c[10]){....}};
类似上面的函数,从C#中如何调用,数组和引用的参数不知在C#中怎么传递。
----------------------------------------------------------------------------------------------
首先上面的代码编译时应该会有问题,因为在C++ CX中,public类中的所有public方法参数必须使用WinRT支持的类型,有些C++原生的类型并不支持,比如int&。另外如果是要传递数组的话,也不能以上面的这种方式,C++中上面的传递只等同于传递了int*,而多语言交互时,比如C#调用C++,是不能用来传递数组的。
那么C++里类似的接口应该怎么来实现呢?
C++类中可以声明为:
void fun(int a,  int* b, Platform::Array
^ c);
由于WinRT对外的public类的方法参数不支持C++原生的引用int&,所以如果要实现类似功能可以用int*,其实MSDN中提到有Windows::Foundation::IReference<int>这个类似引用的类型,但是在我的VS2011环境中暂时找不到这个类型的定义,编译通不过,暂时用不了。而数组的参数可以用Platform::Array<int>^类型。我随便写了些处理如下所示:
int fun(int a,  int* b, Platform::Array
^ c) { int sum = 0; (*b) = 5; for (int i = 0; i < c->Length; i++) { sum += c[i]; } return sum * a + (*b);}
C#怎么调用呢?本人对C#.Net不是很擅长,只是做了下尝试,可以如下调用:
test_class test= new test_class();int a = 2;int b = 0;int[] c = new int[5]{1,2,3,4,5};int x = test.fun(a, out b, a);
第一个参数是整型,直接传递int数值就可以,第二个参数在C++方法中是int*,映射到C#中就应该是out int,所以我们可以使用C#中的out关键字来传递b,最后一个参数是数组,可以直接传递C#中的数组类型。
关于WinRT下多语言交互调用是接口参数其实还有很多问题,有时间的话会整理下另外再写篇文章来说明,本文只是简单解决一下“”留言提的问题。

转载地址:http://qceqj.baihongyu.com/

你可能感兴趣的文章
SSM如何实现上传单图片
查看>>
SSM环境下java如何实现语音识别(百度语音识别版)
查看>>
ajax方法参数的用法和他的含义
查看>>
数据库基础技巧及用法
查看>>
实用方法:无request参数时获得当前的request的方法
查看>>
JS操作数组常用实用方法
查看>>
java实现MD5多次进行加密加盐操作
查看>>
springboot实现CAS的server服务器端的搭建,并实现链接mysql数据库,自定义加密算法
查看>>
Python超详细的安装教程
查看>>
小甲鱼Python第一讲(我和Python的第一次亲密接触)
查看>>
小甲鱼Python第三讲(小插曲之变量和字符串)
查看>>
小甲鱼Python第十一讲(一个打了激素的数组2)
查看>>
小甲鱼Python第十三讲(戴上了枷锁的列表)
查看>>
小甲鱼Python第十四讲(各种奇葩的内置方法)
查看>>
小甲鱼Python第十五讲(格式化)
查看>>
小甲鱼Python第十七讲(Python的乐高积木)
查看>>
小甲鱼Python第十八讲(函数:灵活即强大)
查看>>
小甲鱼Python第十九讲(函数,我的地盘听我的)
查看>>
小甲鱼python第二十讲(内嵌函数和闭包)
查看>>
小甲鱼Python第二十一讲(lambda表达式)
查看>>