P/Invoke中传递结构数组参数的问题 我们知道一般在p/invoke中传递int[]时,在c++中改变了数组的值,c#中也就改变了。而如果字符串数组,就不会改变,除非加out属性。这里我想问如果是结构数组会怎么样,是像int[]那样,还是string[]那样呢。请高手解答。另外如果是一个对象数组又是什么情况呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个传递理论上只能是值类型的。string,stringbuilder实际上只是一个巧合。c++中并无法理解你传来的是基于.net什么类型,只是知道传来一个地址,我往这个地址读写数据,如果你传递对象, C++中将会顺序的填写内存。造成内存错误报出异常。暂无办法传递结构体进去。如果结构体,你需要用Attribute明确声明成员变量的类型,数组则需要声明ConstSize属性确定长度。 To wuyazhe:我可不可以这么理解,除了string,stringbuilder,其它对象(地址)传递到c++端,如果修改这个对象,也就是直接修改这个地址上的值,那么c#端看到的是修改后的值。是这样理解吗? 如果是这样,那么结构数组也是传递一个地址到c++端,如果改变了,c#端也是应该看到改变了的值的,对吗? 你要知道c#是托管内存的,如果内部有个变量是引用类型,那这个引用类型的对象的地址,就未必和这个对象在一起,你c++中如何找得到那块内存?如果都是顺序排列这么简单。当然就没问题了。我也很少p/invoke,不瞎扯了,如果hdt/v狗狗/sp1234/zegk能来说说还差不多。 引用类型问题??? 数据库查询不到结果 新手基础问题贴:如何实现关闭A窗,打开MDI窗,关闭MDI窗即关闭程序 DataGridView如何进行刷新? 请教使用UDP异步收发数据时出现的“无法访问已释放的对象”错误? 谁能告诉我一个用ADO.net连接数据库的方法 简单问题,搞不定,在线等 能显示表QA_AnswerCollection 中的数据,但是不能插入,也没报错,这是怎么回事啊? SQL数据恢复 谁告诉我c#编译器在处理事件委托时是怎么工作的? 网页中调用摄像头 在线等,c#事件问题,求高手解答
string,stringbuilder实际上只是一个巧合。
c++中并无法理解你传来的是基于.net什么类型,只是知道传来一个地址,我往这个地址读写数据,如果你传递对象, C++中将会顺序的填写内存。造成内存错误报出异常。暂无办法传递结构体进去。
如果结构体,你需要用Attribute明确声明成员变量的类型,数组则需要声明ConstSize属性确定长度。