DLL的接口如下extern "C" void Fuc(int *A,int B,int C,int D,int E,double *F) 在函数中A,F实际上是长度为18的数组,第一个参数为输出,其他为输入。我在C#中这么写的:using System.Runtime.InteropServices;
[DllImport("****.dll")]
public static extern void Fuc(ref IntPtr A,long B,long C,long D,long E,IntPtr F);调用如下:IntPtr A=System.Runtime.InteropServices.Marshal.AllocHGlobal(72);
IntPtr F=System.Runtime.InteropServices.Marshal.AllocHGlobal(144);double[] arr=new double[18];
//arr初始化
System.Runtime.InteropServices.Marshal.Copy(ayy,0,F,18);//将数据复制到内存指针Fuc(ref A,B,C,D,E,F);//B,C,D,E,F已定义和初始化,这里省略调用后A中还是没有值,请高手指点。我应该怎么调用这个DLL
[DllImport("****.dll")]
public static extern void Fuc(ref IntPtr A,long B,long C,long D,long E,IntPtr F);调用如下:IntPtr A=System.Runtime.InteropServices.Marshal.AllocHGlobal(72);
IntPtr F=System.Runtime.InteropServices.Marshal.AllocHGlobal(144);double[] arr=new double[18];
//arr初始化
System.Runtime.InteropServices.Marshal.Copy(ayy,0,F,18);//将数据复制到内存指针Fuc(ref A,B,C,D,E,F);//B,C,D,E,F已定义和初始化,这里省略调用后A中还是没有值,请高手指点。我应该怎么调用这个DLL
public static extern void Fuc(ref int A,long B,long C,long D,long E,ref Double F);
简单的C++指针可以直接用引用来代替
[DllImport("****.dll")]
public static extern void Fuc(ref long[] A,long B,long C,long D,long E,double[] F);调用前A还是18行,调用后反而变为1行了,并且值为0
这个我也试过,也不行啊,在Fuc源码中,A和F其实是个数组
{
int i,j;
for(i=B-1;i<B*C;i+=B){A[i]=D;}
for(i=0;i<C;i++){
for(j=0;j<B-1;j++){
int k=i*B;
int tmp=int(floor(A[k+B-1]*F[k+B-1]/F[k+j]));
if(tmp<D){tmp=D;}else if(tmp>E){tmp=E;}
A[k+j]=tmp;
}
}
return ;
}付上源码,不需全看明白,只需看看A,F是怎么用的就行。
这种情况下应该怎么调用?
private static extern void Fuc(IntPtr A, int B, int C, int D, int E, IntPtr F);
public static extern void Fuc(int[] A,int B,int C,int D,int E,double[] F);数组前面不用加ref,另外long改为int
int[] A=new int[18];
double[] F=new double[18];Fuc(A,B,C,D,E,F);//B,C,D,E,F已定义和初始化,这里省略
有自己的结构的话。需要定义格式说明
[DllImport("****.dll")]
public static extern void Fuc(int[] A,int B,int C,int D,int E,double[] F);我之前把B,C,D,E声明成long型了,就总出错。下面是C#调用DLL,和VB调用DLL的参数对照,供大家参考,我就是之前在VB中调用时将原函数中定义为int型的变量声明成long型,这是正确的;到C#中再调用时就想当然了,大家引以为戒。http://blog.csdn.net/dz45693/archive/2009/09/26/4598867.aspxhttp://www.vbgood.com/article-2425.html最后非常感谢大家的帮助。