问题描述
我的VB做的DLL中,publicfunctiontest1(refages()asinteger)‘在此function中返回的ages()的元素个数不确定,可能10个,也可能20个endfunction然后想在C#中调用,该怎么写呢,因为c#中的数组必须定长,而我的VB的DLL中返回的数组个数是不确定的,调用时C#可能会提示下标越界。如果我不想把c#中的数组设得很大,该怎么办呢?
解决方案
解决方案二:
http://www.cnblogs.com/angellinby/archive/2010/03/16/1687701.html
解决方案三:
这个数组内存应该是VB里面申请的吧?那样就不存在长度不确定的问题,C#调用的时候不用管长度。我倒是担心,这个内存怎么释放。VB会不会释放它?
解决方案四:
http://www.cnblogs.com/angellinby/archive/2010/03/16/1687701.html这文章里没有讲到不定长数组的问题啊。固定长度的数组我试验成了。但是不定长的数组,不行。
解决方案五:
对于平台调用来说,参数传递必须给出具体空间的大小,无论是输入、还是输出。对于非托管代码参数出现的动态数组、集合等,需要进行简单改造,达到互操作的要求!也就是把动态的数组,变成静态大小的数组(使用前)。就楼主的这个例子,可以这样改造:publicfunctionGetArrSize()integer//先获取动态数组大小publicfunctiontest1(refages()asinteger,sizeinteger)//参数给出具体大小这样,对于net这边,平台调用的映射你自己就可以搞定了!你可能会提出一个问题:如何获取动态数组大小!其实,不管是动态数组,还是静态数组,它们在使用前都必须分配具体大小的空间,你获取这个值就可以了!另外,你可以想想数据库查询,返回一个动态集合的问题,是不是也是这样!