我正在创建一个 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 调用该方法时发生崩溃。