首先是我的目的:
在C++中递归计算,然后将计算出来的结果返回到数组中;因此数组大小是动态的;
EXPORT void CppToCS_Interpolation(int n, int p, double U_Vector[], double output[],PolyLine_Point* Control_point,int *m)
{
//将插补封装在C++中只返回常规的结果给C#调用;
double Step_B = 0;
double ui = 0; Node_List DP_List; //自定义结构 CpptoBSpline_Interpolation(n, p, U_Vector, Control_point, ui, 0.001, Step_B,DP_List);//递归
int L1 = 0;
L1 = DP_List.Amount(); *m = L1;
for (int j = 0; j < (*m); j++)
{
output[j] = DP_List.GetValue(j + 1);
} return ;
}
在C#进行封装时,声明:
[DllImport("InterpolationNC.dll", EntryPoint = "CppToCS_Interpolation")]
public unsafe static extern void CppToCS_Interpolation(int n,int p,double[] U_Vector,ref double[] output,PolyLine_Point[] Control_Point,[In,Out]ref int m);在使用时,首先定义一个足够大的数组传入到CppToCS_Interpolation中,但是在执行时,C#界面自动闪退;
因为这个地方只使用了这个函数,因此怀疑我这个封装是否正确?如果有,请指出我的错误~
还有就是我这种动态的数组,有其他办法,添加进来么?给定一个大数组,太占内存了;
在C++中递归计算,然后将计算出来的结果返回到数组中;因此数组大小是动态的;
EXPORT void CppToCS_Interpolation(int n, int p, double U_Vector[], double output[],PolyLine_Point* Control_point,int *m)
{
//将插补封装在C++中只返回常规的结果给C#调用;
double Step_B = 0;
double ui = 0; Node_List DP_List; //自定义结构 CpptoBSpline_Interpolation(n, p, U_Vector, Control_point, ui, 0.001, Step_B,DP_List);//递归
int L1 = 0;
L1 = DP_List.Amount(); *m = L1;
for (int j = 0; j < (*m); j++)
{
output[j] = DP_List.GetValue(j + 1);
} return ;
}
在C#进行封装时,声明:
[DllImport("InterpolationNC.dll", EntryPoint = "CppToCS_Interpolation")]
public unsafe static extern void CppToCS_Interpolation(int n,int p,double[] U_Vector,ref double[] output,PolyLine_Point[] Control_Point,[In,Out]ref int m);在使用时,首先定义一个足够大的数组传入到CppToCS_Interpolation中,但是在执行时,C#界面自动闪退;
因为这个地方只使用了这个函数,因此怀疑我这个封装是否正确?如果有,请指出我的错误~
还有就是我这种动态的数组,有其他办法,添加进来么?给定一个大数组,太占内存了;
解决方案 »
- VS里这个背景色怎么调?
- 继承ToolStripControlHost创建的Button,怎么添加设计时自定义下拉属性?
- vs2008C#制作的软件安装时自动连接到微软下载.NET Framework怎么解决?
- 请问如何在页面点击某个链接后,自动定位到网页某个具体位置(页面很长)
- 请问Longhorn操作系统默认安装.NET Framework吗?
- 如何把新闻,通知等的内容按照一定的格式显示出来啊?
- ?aspx里怎样设置DataGrid列宽
- 虚心请教一个关于事件的问题……
- 求助,这个怎么不对?
- C#基本技巧 高手们都来跟贴!
- C#的一个基础问题
- ERROR [IM002] [Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
两个
1) 返回计算结果的长度或个数;
2)根据1)返回个数分配合适大小的数组,读取结果2.vs支持 c#和C++ 代码联调,也就是把所有的工程加载
到一个解决方案中,设置项目-“调试”-“启用非托管代码调试”
下断点Debug比猜测原因直接高效的多
我试了本地调试,还是直接退出,没有任何错误报错,我觉得可能是我的DLL调用的格式有问题~我再自己看看这块,格式怎么弄;刚接触复杂的dll调用就不行了~