这个ATL的问题讨论了很久都没有人能解决,是不是微软产品的BUG???很多参与讨论的人都没有仔细看过和测试过我贴出的内容,而且好像他们都没有做过同类的问题(有点奇怪,因为这个问题并不少见啊),因此他们的建议很少是有效的。所以请各位先看清楚我贴出的代码,并且编译和调试一下,再给我一个答案http://expert.csdn.net/Expert/topic/1423/1423793.xml?temp=.6786005

解决方案 »

  1.   

    看过了你的问题,由于你的接口是自动化接口,采用的是类型调度,在这种情况下,long*是不能作为in参数的。
    解决这个问题,你可以采用VARIANT,或者不采用自动化接口。
    interface _IaaaEvents : IUnknown
    {
      HRESULT test([in,out, size_is(4)] long *p);
    };
    试试吧,应该可以的。
      

  2.   

    to  arxing(阿行):
    为什么在vb中很容易就搞定,而在vc中只能采用VARIANT?vb不是基于COM 的吗?
      

  3.   

    VB是傻瓜式的,当然什么都好弄。但是它的功能有限,只能采用类型库调度,你试试跨公寓,跨进程,甚至跨机器传递参数?这时候你就发现VC才是无所不能的。
    by the way,我上面写错了,应该是 HRESULT test([in,out, size_is(1)] long *p); size_is是表示数据的元素,而不是大小。
      

  4.   

    写错了,size_is是数组元素的个数。
      

  5.   

    我基本上从来不用VB,除了偶尔写一两句ASP外。但是不管你用VB写了什么的类型库,我都可以原封不动用VC写一个出来。不信试试吧。
      

  6.   

    to arxing(阿行):
    我试过你的方法,还是不行。
    你可否给你的email或msn给我,我把我的代码传给你看看,我的代码其实也是很简单的几句,但就是调不通。
      

  7.   

    to george2000(george) :
    请看http://expert.csdn.net/Expert/topic/1423/1423793.xml?temp=.6786005