控件有个方法:BOOL GetName(BSTR*pstrName);
那么在网页中该如何调用呢?(用JavaScript)
我这样写:
var strName;
objocx.GetName(strName); // 确定对象已经创建,而且这个方法的执行是成功的。却得不到值啊我不能改变这个控件的接口方法,
有没有办法得到输出参数传出来的值吗?
谢谢.

解决方案 »

  1.   

    BOOL GetName(BSTR*pstrName);
    你这个方法声明的不正确,你是不是想返回一个字符串啊,需要这样声明GetName([out,retval]BSTR*pStrName);
      

  2.   

    这个问题刚自己搞过,方法如下:
    IDL文件中这样声明
    [id(1), helpstring("method GetString")] HRESULT GetString([out,retval]BSTR*  pstr);
    头文件中:
    STDMETHOD(GetString)(/*[out,retval]*/BSTR*  pstr);
    CPP中STDMETHODIMP CCJSString::GetString(BSTR *pstr)
    {
    USES_CONVERSION;
    SysReAllocString(pstr, T2OLE("xxxx")); return S_OK;
    }JS中直接调用就可以了,不需要填写参数 var xx= xxx.GetString();
      

  3.   

    koower()和liuzhiyong(hhh)兄,感谢你们的热心回复。
    你们两个的解决方案是一样的,都是利用ATL来实现控件。但如果用MFC实现一个控件的话,如果必须实现一个VARIANT_BOOL GetName(BSTR* pstrName);这样的接口,JavaScript/VBScript该怎么调用呢?感谢大家的关注。
    3X
      

  4.   

    补充:koower()和liuzhiyong(hhh)兄提供的方案是一样的,也是可行的。
      

  5.   

    JavaScript 一支持引用 的参数,它的参数是值传递,所以你这个方法不能从参数返回, 如果改用VBSCRIPT来调用就可以了。解决的办法是不使用引用 的参数。而直接通过返回值来返回字符串。
    HRESULT  GetName([out, retval] BSTR* pstrName);
      

  6.   

    您好,我用VBScript也调用不成功啊?
    Dim  strName 
    objocx.GetName(strName)  您是怎么调用呢?
      

  7.   

    哦,对了,脚本里要从引用参数返回,必需将参数声明成 VARIANT 而不能是 BSTR. 
    HRESULT  GetName([out, retval] VARIANT* pstrName);
      

  8.   

    我刚用ATL写了一个控件小例子:
    实践证明:将接口声明成:HRESULT GetName([out,retval]BSTR *pbstrName);
    用VBScript和JavaScript都是可以调用成功的。也许理论上,需要声明成:HRESULT  GetName([out, retval] VARIANT* pstrName);
    希望得到进一步指点。谢谢。
      

  9.   

    同时,我用MFC也写了一个控件的小例子:
    实践证明:将接口声明成:BSTR GetName();是可以的;
    而声明成VARIANT_BOOL GetNameII(BSTR* pstrName);却得不到值!在网页中,如下调用:
    // VBScript
    Dim  strName 
    objocx.GetName(strName)  // JavaScript
    var strNameII;
    objocx.GetNameII( strNameII );如果必须调用这样的接口(VARIANT_BOOL GetNameII(BSTR* pstrName); )
    怎么调用呢?谢谢。