这是一个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
但我还是不懂啊
回调改下,改成 intprt dbx,intptr dby,uint uDotCount
uDotCount是前面两个数组的长度?
再在c#里把 inptr转成double[]
是的,uDotCount是数组长度
double[] dbx, double[] dby这是他提供的例子这么写的,这是回调函数,我要是改那么委托也得改了,还能回调吗
@猝不及防: 他都提供demo了,那意思是他搞定了,那让他帮下忙三。
uDotCount 值是1?
所以
dbx数组里有一个元素
dby数组里有一个元素
@日暮青色:
dbx数组里有一个元素
dby数组里有一个元素
但是uDotCount 是1w
我去找他吧,提供了个半成品demo,还得二次加工
@猝不及防: 这不是逗嘛,uDotCount 是1w, dbx, dby的长度也应该是1w才对啊。
应该是需要用intptr,intptr代表地址,这地址是他的dll给你的,再转成数组就ok了。
@日暮青色: 他好像就是这个意思
dbx[0]就是地址,我怎么转呢?
这个例子下
dbx[0]=4000;
dbx[0]=0.0354154151;
这是地址吗?
@猝不及防:
参考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);
}