目前可以实现32位程序调用32位com,传数组。
见:http://topic.csdn.net/u/20111202/14/c8393ab1-02d3-432f-a4a5-8f45f7cac619.html?75990
也可以实现32位程序调用64位com,传非数组数据。请教VC语言32位程序调用64位com,如何传数组?

解决方案 »

  1.   

    也可以实现32位程序调用64位com,传非数组数据。不了解com,好像32位程序不可调用64位dll.
      

  2.   


    不传数组时是可以成功的,说明能调用。
    另外,我做成进程外,exe形式。
      

  3.   


    我想传递double型的数组。应用程序和COM都用VC2008写。
      

  4.   

    32位和64位之间能传递double型的指针,却没法成功传递double数组。
    有一点是确定的32位用4字节存指针,而64位用8字节。
    可能因为数组涉及到地址,有木有变通的方法呢?
      

  5.   

    用其他通用类型,SAFEARRAY等,而不是double等这种不同长度类型
      

  6.   


    谢谢oyljerry的持续关注,SAFEARRAY等通用类型估计可以,我再学着用用。
    我现在也想出来了了一个不太高明的变通方法:1)在COM中设置一个类,类中定义一个指向数组的指针。
    2)COM中定义接口函数动态为数组指针申请内存。
    3)COM中定义接口函数向数组中存数据,一次存一个数据,比如就叫OneByOne(val,index)。
    4)在应用程序中循环调用OneByOne()函数,完成对数组的“充值”。
    5)定义释放内存的接口函数。用时间我写篇文档,详细说明一下这个问题。
      

  7.   

    用SAFEARRAY是可以的,这个肯定比你说的那个方法容易
      

  8.   


    我对COM的应用,处于一个照猫画虎的水平。请yu解答一下我的几个疑问可以吗?
    1.资料上说“由于SafeArray具有比数组指针更复杂的结构,所以,编程比使用数组指针复杂(指用VC++编程,如果用VB实现COM,这是唯一的传递方式。),程序运行效率也相对较低。”这个说法权威吗?我的情况是都用VC编程,是否适合使用SafeArray?
    2.刚才我说我的水平是照猫画虎的档次,能否提供一个完整的程序实现一个功能,比如把传进去的数组求和,然后返回结果。CSDN下有个资源栏目,传上去供我学习一下。
    3.大家都知道C中数组下标从0开始,SafeArray中数组下标从几开始?
      

  9.   


    我64位程序,不能调用32位dll.
    所以就把32位dll包含成32位exe在后台运行。
    然后64位程序与之通过管道交换数据(纯数据),也是可以的。
    纯数据本身没有地址。