c++函数中的指针参数怎么转为c#函数

haodafeng2012year 2012-05-17 10:39:15
比如我有一个c++函数
void func(unsigned short *m)
{
unsigned short *n=new unsigned short[5]{1,2,3,4,5}
m=n;
}
这样在我调用func函数时通过m指针就可以得到 1,2,3,4,5这五个数
但是如果想用c#调用func怎么弄呢
我是写成 void func(uint[] m)
但是调用的时候m只能得到m[0],调用m[1]就说是数组越界了
高手帮忙看看哪里出问题了
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

自己把问题搞定了,有同样疑惑的朋友可以看我的文章http://www.360doc.com/content/12/0517/14/2150347_211658720.shtml
[/Quote]
你自己提问没有说清楚,看你发的文章才知道,你是通过委托的形式在使用这个函数。
另外即使你使用Intptr,这个数组长度根本不知道,Marshal调用的时候,必须指明长度,你如何保证不越界?不是我没有想到Intptr,而是你给的条件不充足。
haodafeng2012year 2012-05-23
  • 打赏
  • 举报
回复
自己把问题搞定了,有同样疑惑的朋友可以看我的文章http://www.360doc.com/content/12/0517/14/2150347_211658720.shtml
haodafeng2012year 2012-05-23
  • 打赏
  • 举报
回复
抱歉哈,因为提问的时候我也不知道问题到底出在哪里,所以问的也没法很具体。不过我把问题解决了,希望遇到同样问题的朋友能在我这得到帮助吧
haodafeng2012year 2012-05-17
  • 打赏
  • 举报
回复
怎么分配非托管内存?c#调用c++我还不熟悉,能写个简单的代码么?
Saleayas 2012-05-17
  • 打赏
  • 举报
回复
如果函数签名是这样的。
那么我估计在说明文档里会说明,这个传入参数 m 数组的长度。
而且,函数内部可能使用 = 赋值,而是使用赋值内存。

此时,你需要分配一个非托管内存来做参数。
haodafeng2012year 2012-05-17
  • 打赏
  • 举报
回复
to:bdmh ref ushort只能得到一个变量的值吧,我这是想要的到整个指针指向的数组的值,能说的稍微具体点么
to:saleayas 我的c++函数是在dll中,不能改c++函数,只能在c#调用时想办法,你有更好的建议么
Saleayas 2012-05-17
  • 打赏
  • 举报
回复
void func(unsigned short **m)
{
unsigned short *n=new unsigned short[5]{1,2,3,4,5}
*m=n;
}
bdmh 2012-05-17
  • 打赏
  • 举报
回复
ref ushort
Saleayas 2012-05-17
  • 打赏
  • 举报
回复
你最好能提供一个 C++ 版的调用这个函数的样例。
qldsrx 2012-05-17
  • 打赏
  • 举报
回复
试试void func(ref uint[] m)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧