1EXPORTDLL_API double* Window_FunHamming2(int N)
2{
3 //非托管内存释放
4 //方法1:C中malloc分配,free释放,需引用cstdlib
5 //方法2:C++中new分配内存,delete释放
6 //方法3:在COM中CoTaskMemAlloc分配内存,CoTaskMemFree释放
7 // 需引用combaseapi.h
8 //C++中new和malloc分配的内存,仅能从非托管堆上释放(dll提供释放函数)
9 //
10 //double* w = (double*)malloc(N * sizeof(double)); //malloc free释放
11 //double* w = new double[N];
12 double* w = (double*)CoTaskMemAlloc(N * sizeof(double));
13 FunHamming(w, N);
14 return w;
15}
1 IntPtr w_ptr = Window_FunHamming2(length);
2
3 double[] w = new double[length];
4 double[] w2 = new double[length];
5 Marshal.Copy(w_ptr, w, 0, length);
6
7 //Marshal.FreeHGlobal(w_ptr);
8 Marshal.FreeCoTaskMem(w_ptr); //C++中应与CoTaskMemAlloc配合使用
9 Marshal.Copy(w_ptr, w2, 0, length);