【问题标题】:Returning a value from a method in an ActiveX control从 ActiveX 控件中的方法返回值
【发布时间】:2008-11-19 10:54:05
【问题描述】:

我正在创建一个 ActiveX 控件,该控件将在网页中用于查询客户端计算机上当前安装的第 3 方软件的版本。该控件只需要公开一个方法 - 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 调用该方法时发生崩溃。

【问题讨论】:

    标签: c++ activex


    【解决方案1】:

    问和回答...

    问题出现在方法本身中缺少 AFX_MANAGE_STATE:

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

    【讨论】:

      猜你喜欢
      • 2014-12-11
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      相关资源
      最近更新 更多