我要求是不能改变Test3中的参数啊!!!
如果不是用这个参数的话,我早都没问题了。

解决方案 »

  1.   

    试试在OnButton3()中
    Test3((BSTR*)aa);
      

  2.   

    有没有搞错?这么用CString和BSTR?BSTR和CString的存储方式完全不同的。
    有很多类封装了BSTR,比如_bstr_t,COleVariant和CComBstr。建议使用这些类来传递BSTR字符串
    void CArraytestDlg::Test3(_bstr_t aa)
    {
    CString bb="asdfasfd";
    aa=(LPCTSTR)bb; 
    }
      

  3.   

    jiangsheng说得对!
    其实我这个问题是在写ActiveX中遇到的,的确涉及到了COleVariant,只是发问的时候简化的给提了出来,以为差不多的,原来那么不同。我在ActiveX中定义了一个方法,其中参数是Test(BSTR FAR*name).
    Test(BSTR FAR* name)
    {
    .....
        COleVariant layerVt;
        layerVt.ChangeType(VT_BSTR);
        layerVt=......
        *name=layerVt.bstrVal;
        SysFreeString(layerVt.bstrVal);
    ....
    }
    其中检查过layerVt.bstrVal得到的值是真确的。但*name就不对了。
    在外部调用ActiveX的这个函数,发现name没有改变,就象我上面说的那样赋值不上。
    不知道问题出在哪里 :((
      

  4.   

    先谢谢jiangsheng(蒋晟)了。关于这个问题,在c/c++版里的james_razor(蹬三轮的)这样回复:
    *((CString *)aa)=bb;如果针对我贴的第一篇情况,那问题是成功解决了,可以成功赋值。可是如果我照搬到ActiveX里时,外部程序调用这个ActiveX的这个方法时,出现内存"xxxx"不能写。faint!
    甚至我试过:
    CString xx=layerVt.bstrVal
    *((CString *)name)=xx;
    也时这样。
    不知道什么原因...又不是很想传个Variant,那样的话,外部调用会相对麻烦。还有什么办法吗?
      

  5.   

    传一段字符缓冲区buffer进来,buffer要够大。
      

  6.   

    问题解决了,最后采用*((CString *)aa)=bb;的方法完成。
    ActiveX里出的问题是由于我外部变量出错。:)多谢jiangsheng帮我想的多种解决方法!
    分数已经给出。谢谢。