首页 新闻 搜索 专区 学院

求助:c# 调用 C++ 传出数组问题

0
悬赏园豆:50 [已解决问题] 解决于 2020-05-14 09:19

这是一个c++回调函数。
当完成时就会触发这个回调函数返回数据

c#这个函数是这么定义的:

    public static void callback_FinalSpecLineReceived(double[] dbx, double[] dby, uint uDotCount)

测试时打断点看了一下值,

dbx数组里有一个元素
dby数组里有一个元素
uDotCount 这个定义是点的个数

然后写文档的人跟我说你知道了这个第一个元素的地址了,知道总长度了,那么所有的数据都有了。。。

不是很理解这个,请问这三个数怎么能得出一组(x,y)的值呢

他建议我看的文章:
https://www.zhihu.com/question/62643118
https://www.cnblogs.com/ye-ming/p/7976986.html

但我还是不懂啊

猝不及防的主页 猝不及防 | 老鸟四级 | 园豆:2495
提问于:2020-04-09 15:28
< >
分享
最佳答案
0

回调改下,改成 intprt dbx,intptr dby,uint uDotCount

uDotCount是前面两个数组的长度?
再在c#里把 inptr转成double[]

收获园豆:50
日暮青色 | 菜鸟二级 |园豆:455 | 2020-04-10 16:50

是的,uDotCount是数组长度
double[] dbx, double[] dby这是他提供的例子这么写的,这是回调函数,我要是改那么委托也得改了,还能回调吗

猝不及防 | 园豆:2495 (老鸟四级) | 2020-04-10 16:52

@猝不及防: 他都提供demo了,那意思是他搞定了,那让他帮下忙三。
uDotCount 值是1?
所以
dbx数组里有一个元素
dby数组里有一个元素

日暮青色 | 园豆:455 (菜鸟二级) | 2020-04-10 16:55

@日暮青色:
dbx数组里有一个元素
dby数组里有一个元素
但是uDotCount 是1w

我去找他吧,提供了个半成品demo,还得二次加工

猝不及防 | 园豆:2495 (老鸟四级) | 2020-04-10 16:56

@猝不及防: 这不是逗嘛,uDotCount 是1w, dbx, dby的长度也应该是1w才对啊。
应该是需要用intptr,intptr代表地址,这地址是他的dll给你的,再转成数组就ok了。

日暮青色 | 园豆:455 (菜鸟二级) | 2020-04-10 16:58

@日暮青色: 他好像就是这个意思
dbx[0]就是地址,我怎么转呢?
这个例子下
dbx[0]=4000;
dbx[0]=0.0354154151;
这是地址吗?

猝不及防 | 园豆:2495 (老鸟四级) | 2020-04-10 17:21

@猝不及防:
参考https://www.cnblogs.com/jhlong/p/5715015.html
我这样应该也可以
private void CallBack(IntPtr ptr, uint len)
{
uint size = len * 8;//字节长度:double 8 int 4 float 4 short 2
double[] buffer = new double[size];
Marshal.Copy(ptr, buffer, 0, (int)size);
}

日暮青色 | 园豆:455 (菜鸟二级) | 2020-04-10 19:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册