小弟最近做一个项目,需要c#调用第三方的DLL,但是DLL接口是我来定,Dll里面的算法具体别人实现。DLL接口暂定如下:
ANALYZEPLANES_API int _stdcall GetCalculateResults(double measureVar[],int PlanesID[],double holeAngle[],double holeDepths[])
{
}
其measureVar[]数组长度是确定的为4,别人拿到这个数组之后,在算法中用其中的数据进行计算。利用接口的其它数组返回计算结果,问题在于计算的数据最终长度不确定,因此我在c#端调用时传递实参数组时不知道应该传多长的数组。当然我想到一个比较笨的方法。是在c#端传递足够长的实参数组,但总觉得这种方法不好。所以想请教各位高手,能不能有好的方法解决这个问题。
ANALYZEPLANES_API int _stdcall GetCalculateResults(double measureVar[],int PlanesID[],double holeAngle[],double holeDepths[])
{
}
其measureVar[]数组长度是确定的为4,别人拿到这个数组之后,在算法中用其中的数据进行计算。利用接口的其它数组返回计算结果,问题在于计算的数据最终长度不确定,因此我在c#端调用时传递实参数组时不知道应该传多长的数组。当然我想到一个比较笨的方法。是在c#端传递足够长的实参数组,但总觉得这种方法不好。所以想请教各位高手,能不能有好的方法解决这个问题。
解决方案 »
- 请教高手,在一个WPF的GeometryModel3D里能加入自己画一些几何图形吗?
- 简单Process.Start问题
- ListView 拖拽数据....获取本地路径.
- 遇到了和3年前同样的一个问题 关于Bitblt的Xor操作
- 请教一个泛型+反射的类型转换难题
- 水晶报表的页眉和页脚大小超过一页的大小问题
- 目前有C#下可用的RTP协议库没有?
- 在WinCE 5.0 + VS2008 + SQLServer2005 上怎么直连电脑上的数据库呢?
- 哪里能下载到:Microsoft SQL Server 2000 Reporting Services
- 哪里有有关pattern(设计模式)的书籍的下载
- 求救 异步方法的等待问题 最优方法
- 关于响应WM_NCCALCSIZE后窗体越来越小的问题
楼主,你定义的C++接口有问题,改成:ANALYZEPLANES_API int _stdcall GetCalculateResults(double measureVar[],int measureSize,int PlanesID[],int planeSize,double holeAngle[],int angleSize,double holeDepths[],int depthSize);你必须明确告诉net这边数组大小,否则它没法正确分配空间,就更谈不上正确传递参数!
//a 输出参数,可能会改变长度
void test(char[] a)
{
//因为是输出参数,且会改变长度,而一段已分配的地址,无法随便改变长度
//所以
a = remalloc(....);
strcpy(a,"......");
}
//请问可以改变吗???
第二种方法就是dll中写两个函数,一个被调用时在堆中分配空间并返回地址和长度,一个函数释放堆内存空间。调用方调用完第一个函数并直接处理数据后,调用第二个函数释放内存。