我用VC作了一个ocx,VB来调用, 在vc中,用AllocSysString返回一个BSTR给VB用,请问我如何去Free这个BSTR?

解决方案 »

  1.   

    那天看到Com本质论里面说了的,可惜不记得了,建议你找来看看,就在前面几章里面
      

  2.   

    SysFreeString是可以,可这个空间是VB药用,我不知它何时用完呀??
      

  3.   

    txdxun() 和 xhzhang6(zxh),我现在找资料较困难,能不能再详细点说???
      

  4.   

    txdxun() 和 xhzhang6(zxh),我现在找资料较困难,能不能再详细点说???谢谢!!!
      

  5.   

    在VB里,你就不用管了,因为VB运行管理器会在不需要的时候自动释放变量的
      

  6.   

    to  Earthdog(Earthdog)
    这个说法也有人提过,但这个内存是我在VC分配的,vb怎只我分了多大??
    还有,如果vb中自动释放,那我用vc调用这个OCX时,不就会有内存泄漏吗?? 
      

  7.   

    VB中会自动释放;
    VC中用SysFreeString释放;
      

  8.   

    我的意思呢,就是我要不要在vc的OCX中,用一个pointer保留下这个BSTR的地址,再做一个Interface,用SysFreeString去释放?
      

  9.   

    to realhill(realhill)
    谢谢你的回答,那就是说,我在ocx中要做一个Interface,用SysFreeString去释放这个内存,是这样的吗??
      

  10.   

    to blueblood7() 
    可这个AllocSysString的Interface要重复调用。。??:(还有,我用BSTR   bStore = str.AllocSysString(), 然后把这个指针返给VB,再用
    SysFreeString(bStore), 这样能行吗??
      

  11.   

    在OCX控件中不用释放这块内存,因为释放的工作应该由调用负责.
      

  12.   

    to realhill(realhill)可是调用没有分配内存, 他怎么知道如何去释放?
    你的意思是不是不用作函数呀??
      

  13.   

    VB:
    string s = OCX.GetString(); // 你的OCX此时会SysAllocString;
    s退出有效范围时,VB会自动调用SysFreeString;VC:
    BSTR s;
    OCX.GetString(&s); // 你的OCX此时会SysAllocString;
    用完后;
    SysFreeString(s);
      

  14.   

    to realhill(realhill)
    VC中的那个SysFreeString(s); 是不是再调用中做得呀??
    可是如果我在OCX中用 BSTR s = new WCHAR[1024];
    外面也这么释放吗???
      

  15.   

    1.是调用中做得;
    2.最好不要这样做:如果想在OCX中保留其值也有很多方法,用BSTR类型最好使用SysAllocString;
      

  16.   

    to  blueblood7() 
    嗯,我是用成员指针来保存的,这样有用是吧?? 呵呵:)
      

  17.   

    to  realhill(realhill)其实,我也知道这样做不对,而且也很少有人会这么做,我只是想不明白外面怎么释放我分的内存???是不是这个说起来很麻烦?? :(我已经给[email protected]发mail了
      

  18.   

    to  realhill(realhill)对不起,我用的是日文抄作系统,我在发一次。。
      

  19.   

    to blueblood7() 
    如果再VB中调用,即使重复调用,是不是也不用作Interface函数呀???
      

  20.   

    谢谢realhill(realhill),你的mail我看完了,总之就是在外面释放!!!:)
    谢谢大家我去给大家加分了,大家都有,呵呵:)
      

  21.   

    呵呵。blueblood7() 的看法我很赞同!!:)
      

  22.   

    不用释放,对于输出侧参数,由调用方(Caller)释放。