我遇到的问题是:
在一个名为MyComTest的ActiveX控件中,有一属性(PropGet)MyParent,该属性返回值是一实现IElement(从IDispatch继承)的组件
我希望能在网页中通过脚本对MyParent访问,也就是:
var parentElement = MyComTest1.MyParent;
alert(parentElement.Name);由于不想在注册表中留下过多的记录,且IElement必须依存IMyComTest存立,因此不希望通过CoCreateInstanse实现。
我用ATL试过以下几种方法:
1、public CElement : ....,IDispachImpl(......){...}
...
HRESULT CMyComTest::get_MyParent(LPIDISPATCH val)
{
// CComObject(CElement)* m_myParent 是CMyComTest的成员变量
CComObject(CElement).CreateInstanse(&m_myParent);
*val = &m_myParent;
}
使用该方法用alert(parentElement);测试时显示undefine,但在debug方式下,可以看到*val为有效值。
2、public CElement : IDispatch{自己实现IDispatch,IUnknown成员函数}
...
HRESULT CMyComTest::get_MyParent(LPIDISPATCH val)
{
// CElement* m_myParent 是CMyComTest的成员变量
m_myParent = new CElement;
*val = &m_myParent;
}
使用该方法用alert(parentElement);测试时出现非法访问错误,但在debug方式下,可以看到*val为有效值。不知各位大侠能否赐教?
在一个名为MyComTest的ActiveX控件中,有一属性(PropGet)MyParent,该属性返回值是一实现IElement(从IDispatch继承)的组件
我希望能在网页中通过脚本对MyParent访问,也就是:
var parentElement = MyComTest1.MyParent;
alert(parentElement.Name);由于不想在注册表中留下过多的记录,且IElement必须依存IMyComTest存立,因此不希望通过CoCreateInstanse实现。
我用ATL试过以下几种方法:
1、public CElement : ....,IDispachImpl(......){...}
...
HRESULT CMyComTest::get_MyParent(LPIDISPATCH val)
{
// CComObject(CElement)* m_myParent 是CMyComTest的成员变量
CComObject(CElement).CreateInstanse(&m_myParent);
*val = &m_myParent;
}
使用该方法用alert(parentElement);测试时显示undefine,但在debug方式下,可以看到*val为有效值。
2、public CElement : IDispatch{自己实现IDispatch,IUnknown成员函数}
...
HRESULT CMyComTest::get_MyParent(LPIDISPATCH val)
{
// CElement* m_myParent 是CMyComTest的成员变量
m_myParent = new CElement;
*val = &m_myParent;
}
使用该方法用alert(parentElement);测试时出现非法访问错误,但在debug方式下,可以看到*val为有效值。不知各位大侠能否赐教?
解决方案 »
- 求OpenGL入门教程
- cfiledialog导致程序关闭的问题
- 假如说 一个计算机系统的有效地址结构是16位,是不是就是说,CPU字长为16?
- 请高手相助!!!
- 在OnCtlColor中创建实心画刷造成GDI泄漏怎样解决?
- 我记得有一个api函数可以得到缩略的路径名,但我现在忘记了!
- 请问LN()和EXP()这两个函数在那个库里?
- 我想在dialog上模拟2个dos窗口,上面的用于输入,下面的用于输出。应该怎么做阿!
- 那位高手知道从什么地方下载代理源代码?
- 请问各位大虾,有谁知道如何向客户区填充颜色啊? 我给 100 分
- DLL中分配的内存的地址如何传到加载它的EXE进程中?100分
- 求com技术内幕源码!
CComObject<CElement>::CreateInstance(&pElement);
pElement->QueryInterface(IID_IDispatch, (LPVOID*)val);
建议看看COM+技术大全