我有一个简单的ATL ActiveX控件,用C ++实现。
如果我将控件嵌入网页中,例如:
<object id="api"
classid="CLSID:<guid here>"
height=400
width=800></object>
我知道如果我在我的coclass构造函数中设置m_hWnd
,我可以从m_bWindowOnly = true;
中的控件获得HWND。这没问题。
如果我尝试从Javascript实例化此ActiveX控件,则过程如下:
var object = new ActiveXObject("registeredControlString");
但我没有获得HWND,我不确定如何将其插入DOM中。
我的问题:
在什么情况下我会得到一个可以从控件中引用的HWND?
答案 0 :(得分:5)
你不会通过构造新的ActiveXObject来获得hwnd,因为你的CComControl :: CreateControlWindow()仅在就地激活期间被调用,而javascript根本没有类型系统来支持就地所需的COM接口激活。
如果您的控件将用作无UI的COM服务器(如脚本中所示),请将ActiveX设计为无窗口句柄。