1、进程外COM与进程内COM传递数组的区别:
在进程内COM定义函数:
void fun(int* p1,int num1)
{
编写方法,p是指向int类型的数组指针,num是数组的长度
}
在main里面
{
定义数组
int* p=new int[3];
调用方法
fun(p,3);
}
这样是没有问题的,因为main中的p指向的内存与p1指向的内存是同一进程的内存,p1同样可以访问到数组空间。
在调用fun函数,值发生了p值的拷贝,num的拷贝。
在进程外COM定义函数:
void fun(int* p1,int num1)
{
//认为p是指向int类型的数组指针,num是数组的长度
(a)打印原数组信息
(b)往数组中填充数据
}
在main里面
{
int* p=new int[3];
(c)初始化数组
fun(p,3);
(d)打印数组
}
由于属于两个进程,p1与p的值不一样,p1指向的内存与p指向的内存也不一样,进程外COM的调用会通过Proxy/stub实现调用信息的传递。
Proxy看见fun(p,3),认为p是指向int的一个指针,不会认为是一个数组的指针,发送调用信息。
Stub接受消息后,发现传递过来的是一个指针,就在自己进程内申请int空间,把值附上,把内存地址赋给指针p1。
所以在(a)中只能获得p[0]的值,在(d)中发现只有p[0]的值发生改变。
2、解决方法
1、通过共享文件来写入数据读取数据。但比较低级
2、使用进程间的共享内存,(不知道怎么弄)
3、使用SafeArray。(不知道怎么弄)