大家好,我用MFC ActiveX ControlWizard封装了一个ocx,接口中有类似如下函数的一个操作:short CTLCardMisCtrl::testFunc(LPCTSTR parm1) 
{
// TODO: Add your dispatch handler code here
OutPutData1[0]='a'; //OutPutData1为一个static数组
OutPutData1[1]='b';
OutPutData1[2]='c';
parm1=OutPutData1;
return 0;
}可是我在ActiveX Control Test Container下或web中用JS脚本调用,我在内存中看到parm1的地址正确指向了OutPutData的地址,并且内存中是‘abc’,但调用的程序并没有得到参数正确的赋值结果,请教大家是什么原因。

解决方案 »

  1.   

    short CTLCardMisCtrl::testFunc(BSTR parm1) 
    参数用BSTR等
      

  2.   

    short CTLCardMisCtrl::testFunc(BSTR parm1) 
    {
    // TODO: Add your dispatch handler code here
    //char OutPutData1[5];
    OutPutData1[0]='a';
    OutPutData1[1]='b';
    OutPutData1[2]='c';
    parm1=_com_util::ConvertStringToBSTR(OutPutData1);
    return 0;
    }这么写不对?
      

  3.   

    ...BSTR 是指针,你这样相当于把parm1指向别处了。你这个函数退出后,这个指针就丢失了
    你应该用memcpy之类的函数给parm1赋值
      

  4.   

    输出参数应该用BSTR* parm1,然后用 *parm1 = _com_util::ConvertStringToBSTR(OutPutData1); 完成赋值。
      

  5.   

    short CTLCardMisCtrl::testFunc(BSTR* parm1) 

    CComBSTR str;
    str = L"abc";
    *parm1 = str.Detach() 
    return 0; 
      

  6.   

    OCX中接口如下:
    short CTLCardMisCtrl::testFunc(BSTR * parm1) 
    {
    // TODO: Add your dispatch handler code here
    OutPutData1[0]='a';
    OutPutData1[1]='b';
    OutPutData1[2]='c';
    *parm1 = _com_util::ConvertStringToBSTR(OutPutData1);
    return 0;
    }
    exe中代码如下:
    void CTestexe1Dlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    char cParam1[20];
    m_myOcx.testFunc(cParam1);
    MessageBox(cParam1);
    }仍然无法读出出ocx处理过的参数
      

  7.   

    void CTestexe1Dlg::OnButton1() 

    // TODO: Add your control notification handler code here 
    _bstr_t cParam1; 
    m_myOcx.testFunc(&cParam1); 
    MessageBox((char *)cParam1); 

      

  8.   

    那试一试这样:
    void CTestexe1Dlg::OnButton1() 

      BSTR cParam1; 
      m_myOcx.testFunc(&cParam1); 
      MessageBox((char *)_bstr_t(cParam1)); 

      

  9.   

    js调用COM方法,传入的参数都是不能返回值的.
    既然testFunc返回了short, 那么传入的parm1是无法返回值的.
      

  10.   

    谢谢大家,pimshell说的很对。