代码之家  ›  专栏  ›  技术社区  ›  korona

从ActiveX控件中的方法返回值

  •  1
  • korona  · 技术社区  · 17 年前

    我正在创建一个ActiveX控件,该控件将在网页中用于查询客户端计算机上当前安装的第三方软件版本。该控件只需要公开一个方法GetVersion,该方法将版本作为整数返回。我对ActiveX非常缺乏经验,在从方法中正确返回值这样简单的事情上也遇到了问题。如果我在IDL中使用以下声明:

    [id(1)] void GetVersion();
    

    与以下实施方式配对:

    BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl)
        DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_EMPTY, VTS_NONE)
    END_DISPATCH_MAP()
    
    void CDetectorCtrl::GetVersion()
    {
        MessageBox(L"Test");
    }
    

    我可以从HTML调用该方法,并很好地看到我的MessageBox。

    但如果我将定义/代码更改为:

    [id(1)] int GetVersion();
    

    和

    BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl)
        DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_INT, VTS_NONE)
    END_DISPATCH_MAP()
    
    int CDetectorCtrl::GetVersion()
    {
        MessageBox(L"Test");
        return 1337;
    }
    

    当我从HTML调用方法时,我崩溃了。

    1 回复  |  直到 17 年前
        1
  •  1
  •   korona    17 年前

    询问并回答。..

    问题似乎是方法本身缺少AFX_MANAGE_STATE:

    LONG CDetectorCtrl::GetVersion(void)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        return 1337;
    }