在HTML中嵌入ActiveX控件时,如何知道是否会获得HWND?

dwe*_*ner 1 c++ atl win32ole visual-c++

我有一个简单的ATL ActiveX控件,用C++实现.

如果我将控件嵌入到网页中,例如:

   <object id="api"
            classid="CLSID:<guid here>"
            height=400
            width=800></object>
Run Code Online (Sandbox Code Playgroud)

我知道m_hWnd如果我m_bWindowOnly = true;在我的coclass构造函数中设置,我可以从控件中获取HWND .这没问题.

如果我尝试从Javascript实例化此ActiveX控件,过程如下所示:

var object = new ActiveXObject("registeredControlString");
Run Code Online (Sandbox Code Playgroud)

但我没有获得HWND,我不确定如何将其插入DOM中.

我的问题:

在什么情况下我会得到一个可以从控件中引用的HWND?

She*_* 蒋晟 5

您不会通过构造新的ActiveXObject来获得hwnd,因为您的CComControl :: CreateControlWindow()仅在就地激活期间被调用,而javascript根本没有类型系统来支持就地激活所需的COM接口.

如果您的控件将用作无UI的COM服务器(如脚本中所示),请将ActiveX设计为无窗口句柄.