从ActiveX控件中的方法返回值

时间:2008-11-19 10:54:06

标签: c++ activex

我正在创建一个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 个答案:

答案 0 :(得分:1)

问及回答......

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

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