C++ 进程外COM 传递数组

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。(不知道怎么弄)






    

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值