求助:vc制作com组件 谁能在接口的函数中定义出引用型参数?
最近用vc做com组件,想让参数定义为数组型的,我想限制一下,让用户强制输入的实参是int[6]这种数组的。
如果不是做com组件,寻常的做法可以这样:
int fun1(int(&a)[6]);
但是在制作com的过程中发现根本不认可&
我即使写最简单的
STDMETHOD (fun2)(int &i);都不被认可
更别说我写STDMETHOD (fun3)(int(&a)[6]);这样的
——我知道万不得已可以有一条路,比如STDMETHOD (fun3)(int*a,int b);这种写法,让b作为a数组的长度,但是这种写法我总感觉关联性太强
请问,我想实现我的目的,我该怎么写?
ps:真诚请教 分不够可以再加
[解决办法]
用指针的方式传递还是好些,灵活性好,你利用第一种的话,直接把数组长度给限死了,这种编写方式不提倡
[解决办法]
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、……
[解决办法]
类型限制只是给编译器用的,或者说类型限制只是在源代码编译阶段才起作用,
你的int(&a)[6])和int(&a)[12])或者int*编译后在本质上都是一样的,编译后都是数据首地址,
之所以会有区别,就是编译器在源代码级别上的硬加上的类型检测而已。
你说的要写到com组件中去,com组件不是源代码级别的,而是二进制级别的,是编译好的二进制代码提供给用户使用。在此级别上,检测类型区别是不方便的。
[解决办法]
COM组件的设计理念是做到语言无关。引用这概念,是语言相关的,有的语言里没这概念。
[解决办法]
int[6]这个本身也是编译时由编译器检测的。编译完了,压跟就检测了。
要不就写文档定协议,要不就自己新建个类型,里面是个int[6]的数组,比如
struct int_arr_6
{
int arr[6];
}
然后fun1接受的是int_arr_6这个参数
int fun1(int_arr_6 param);