C#怎么调用、接收COM的不定长数组?

问题描述

我的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这边,平台调用的映射你自己就可以搞定了!你可能会提出一个问题:如何获取动态数组大小!其实,不管是动态数组,还是静态数组,它们在使用前都必须分配具体大小的空间,你获取这个值就可以了!另外,你可以想想数据库查询,返回一个动态集合的问题,是不是也是这样!

时间: 2024-07-29 20:14:32

C#怎么调用、接收COM的不定长数组?的相关文章

字符数组-C++动态创建不定长数组

问题描述 C++动态创建不定长数组 我想通过直接输入一个任意大小的字符串来创建一个字符数组,但又不想浪费多余的空间,要怎么做到呢?新手... 解决方案 char * newchar(const char * ps){ char * prt = 0; if(ps){ int nlen = strlen(ps); prt = new char[nlen+1]; strcpy(prt,ps); } return prt; } 解决方案二: 直接用指针,可以动态申请大小,且可以将指针当成数据来访问. 如

结构-js 或 php 不定长数组怎样动态嵌套循环

问题描述 js 或 php 不定长数组怎样动态嵌套循环 类似这样结构的数组 :arrobj=[[arr1],[arr2],[arr3]];假如arrobj的长度不确定怎样能得到类似的循环: for(var key1 in arr1){ for(var key2 in arr2){ for(var key3 in arr3){ } } } 解决方案 for..in来循环就行了..你的这个结构只需要2层,下面是js的 <script> var arrobj = [[1, 2, 3, 4], [1]

java-Java不定长数组一般应用于哪些场景?

问题描述 Java不定长数组一般应用于哪些场景? Java不定长数组一般应用于哪些场景? Java不定长数组一般应用于哪些场景? 解决方案 运行前不确定有多少数据,只有在运行后才能知道,比如从10000个数据里寻找自己感兴趣的数据,而这些数据的个数不确定,可能有10000,也可能有几个,所以最好选择动态数组存储 解决方案二: "请从键盘上输入一组数据,输入0表示输入结束" "从文件中读取一组数据" "将数组中>10的数据存入另一个数组" 解

Swift中socket不定长消息发送接收的方法总结

使用 socket 可以很方便地实现客服端和服务器的长连接,并进行双向的数据通信.但有时我们发送的数据包长度并不是固定的(比如做一个聊天系统),通常的做法是在数据包前面添加个包头信息,让接收方知道整个发送包的长度.也就是说接收方先收这个固定长度的包头信息,然后再根据包头信息里面定义的实际长度来接收包数据. 下面通过一个聊天室程序演示 socket 发送/读取不定长消息包的几种方法.socket 通信这里我们使用了一个封装好的 socket 库(SwiftSocket). 几种方法 (以聊天室为例

Go语言的可变(不定长)参数函数

一般情况一个函数的传入参数都是固定的,但是有一些函数能传入不定数量的参数(可变长的).比如c语言中的printf.可以看:<C语言"-"占位符及可变参数函数> 在Go语言中,也有这样的函数.用法类似,也是三个点. 可变参数函数声明: 1 // 这个函数可以传入任意数量的整型参数 2 func sum(nums ...int) { 3     fmt.Println(nums) 4     total := 0 5     for _, num := range nums {

不定长内存池之apr_pool

内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1.              不定长内存池.典型的实现有apr_pool.obstack.优点是不需要为不同的数据类型创建不同的内存池,缺点是造成分配出的内存不能回收到池中.这是由于这种方案以session为粒度,以业务处理的层次性为设计基础. 2.             定长内存池.典型的实现有LOKI.B

C语言内存释放与调用子函数时间变长

问题描述 C语言内存释放与调用子函数时间变长 各位大神,你们好: 小弟最近用C语言编程遇到这样一个问题(代码比较多,就不粘了,见谅): 在子函数A中用malloc申请内存,在调用函数A的B函数中释放申请的内存.重复运行100次函数B,发现:在函数B中若不释放A的申请的内存,每次A运行的时间基本一样,而内存占用量持续上升:若在函数B中释放A申请的内存,占用内存问题解决了,然后每次调用A的时间又持续上升. 完全没有搞明白这是个什么情况,你们怎么看? 解决方案 堆上的内存申请和释放一定要一一对应,用完

类似12306账号中的常用联系人这种不定长的数据是怎么存储的?数据库是如何建的?求指教

问题描述 类似12306账号中的常用联系人这种不定长的数据是怎么存储的?数据库是如何建的?求指教 类似12306账号中的常用联系人.论坛回复 这种不定长的数据是怎么存储的 解决方案 就这个网站来说,应该很少存在Unicode类型的数据,如果你真担心会有多语言的数据,比如维语.繁体中文等,可以用nvarchar类型存储.一般如果仅展示,那么以逗号或者其他符号分割每个联系人,然后以一列的形式存储即可,如果还需要做互动操作,建议创建一个关系表,存放当前人员和联系人的关系,通常是两列,一列是当前人员的主

oracle中变长数组varray,嵌套表,集合使用方法_oracle

创建变长数组类型 CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE varray_type MODIFY ELEMENT TYPE varchar2(100) CASCADE; CASCADE选项吧更改传播到数据库中的以来对象.也可以用 INVALIDATE 选项使依赖对