我在用MFC写的ActiveX控件中添加了一个long SetData(VARIANT data)方法;然后我从使用此控件的程序中调用这个方法:m_MyCtrl.SetData(myVariant);时,Debug发现传进去的参数,经过一番“折腾”后(这是MFC库干的,应该没问题),到SetData(VARIANT data)函数体时已经变样了,结果导致程序Crash;我在本地(使用m_MyCtrl的地方)写了一个一模一样的LocalSetData(VARIANT)函数,调用是正确的,所以我的函数体应该没问题。请问在ActiveX控件导出函数中使用VARIANT类型参数有什么其他需要注意的地方吗?因为我的控件中其它没有使用VARIANT类型参数的导出函数都是工作正常的。我用的是vs2003.谢谢!

解决方案 »

  1.   

    那为什么我调用LocalSetData(VARIANT)函数是正确的呢?
    我确实被这个问题郁闷了,搞了1天也没找到问题。唉。。
      

  2.   

    终于知道了!!!我用VS 2005重做了个小例子,结果发现VS2005的Wizard自动生成SetData方法的定义是"SetData(VARIANT& data)", 而VS2003生成的是“SetData(VARIANT data)”;
    虽然他们在IDL文件里写的都是:[id(1), helpstring("方法SetData")] LONG SetData(VARIANT data);唉,这是VS2003的Bug吗?