我按照
http://support.microsoft.com/support/kb/articles/q196/0/26.asp
一步一步做下来
VB测试的Demo没有问题,但是Javascript调用出现问题。连接点数目总是0.望各位提点一下!
http://support.microsoft.com/support/kb/articles/q196/0/26.asp
一步一步做下来
VB测试的Demo没有问题,但是Javascript调用出现问题。连接点数目总是0.望各位提点一下!
解决方案 »
- IWebBrowser2显示的网页出现双滚动条
- 有人用过ColorCheckBox的按钮类吗?
- cin读取键盘输入时,回车键输入的是换行符,还是回车符呀?
- 软件自毁技术 能不能用软件编写 程序彻底删除本软件的数据或者是删除整个硬盘的数据
- GDI+问题
- 怎样获得位图象数的位置?
- 24bit bmp 如何转换成 8bit bmp
- 求回朔法遍历 马!!(寻找一条走遍棋盘每一个并且子经过一次的一条路经)
- 请问熟悉OLE2和ACTIVEX的高手
- 求助:如何在PreTranslateMessage(MSG* pMsg)中捕获自定义消息
- 用ADO读取excel文件时,为何有的字段不能正确读取?如果能解决此疑问80相送
- 除了OnCtlColor还有别的改变static字体颜色的方法吗?谢谢
//ATL simple object fire event jscript/vbscript compatible
//make http://support.microsoft.com/kb/q196026/ to be script compatible
//by masterz with vc6(sp6) on windows 2000(sp4) IE6.0
#ifndef __MYATL_H_
#define __MYATL_H_
#include <atlwin.h>
#include <atlctl.h>
#include "resource.h" // main symbols
#include "MyAtlDllCP.h"
#define WM_TASK_FINISH (WM_USER + 101)
class ATL_NO_VTABLE CMyAtl :
public CWindowImpl<CMyAtl>,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyAtl, &CLSID_MyAtl>,
public IConnectionPointContainerImpl<CMyAtl>,
public IDispatchImpl<IMyAtl, &IID_IMyAtl, &LIBID_MYATLDLLLib>,
//begin
public IObjectSafetyImpl<CMyAtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
public IProvideClassInfo2Impl<&CLSID_MyAtl, &DIID__IMyAtlEvents, &LIBID_MYATLDLLLib>,
//end
public CProxy_IMyAtlEvents< CMyAtl >{
public:
CMyAtl()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_MYATL)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CMyAtl)
COM_INTERFACE_ENTRY(IMyAtl)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
//begin
COM_INTERFACE_ENTRY(IObjectSafety)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
//end
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CMyAtl)
CONNECTION_POINT_ENTRY(DIID__IMyAtlEvents)
END_CONNECTION_POINT_MAP()
public:
STDMETHOD(InitTask)(long number);
private:
long m_ForHtml;
public:
long m_number;
DECLARE_WND_CLASS("MyAtl")
BEGIN_MSG_MAP(CMyAtl)
MESSAGE_HANDLER(WM_TASK_FINISH, OnTaskFinished)
END_MSG_MAP()
public:
STDMETHOD(get_ForHtml)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_ForHtml)(/*[in]*/ long newVal);
LRESULT OnTaskFinished(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled)
{
Fire_TaskFinished((long)wParam);
Fire_NoParam();
return 0;
}
HRESULT FinalConstruct()
{
RECT rect;
rect.left=0;
rect.right=100;
rect.top=0;
rect.bottom=100;
m_ForHtml = 0;
HWND hwnd = Create( NULL, rect, "MyAtlWindow", WS_POPUP);
if (hwnd)
return S_OK;
else
return HRESULT_FROM_WIN32(GetLastError());
}
void FinalRelease()
{
if (m_hWnd != NULL)
DestroyWindow();
}
};
DWORD WINAPI justDoIt(LPVOID lpParameter);
#endif //__MYATL_H_// //////////////////////////////////MyAtl.cpp : Implementation of CMyAtl
#include "stdafx.h"
#include "MyAtlDll.h"
#include "MyAtl.h"
DWORD WINAPI justDoIt(LPVOID lpParameter)
{
CMyAtl *myAtl = (CMyAtl*)lpParameter;
long result;
for (int i = 1; i <= myAtl->m_number; ++i)
result = i * 2;
myAtl->PostMessage(WM_TASK_FINISH,result,0);
return 0;
}
STDMETHODIMP CMyAtl::InitTask(long number)
{
HANDLE hThrd;
DWORD tid;
m_number = number;
if((hThrd = CreateThread(
0,
0,
(LPTHREAD_START_ROUTINE)justDoIt,
(void *)this,
0,
&tid)) == NULL)
{
//error handling here
}
CloseHandle(hThrd);
return S_OK;
}STDMETHODIMP CMyAtl::get_ForHtml(long *pVal)
{
*pVal = m_ForHtml;
return S_OK;
}STDMETHODIMP CMyAtl::put_ForHtml(long newVal)
{
m_ForHtml = newVal;
return S_OK;
}
<html>
<BODY TOPMARGIN="0" LEFTMARGIN="0">
<input id=textOutput name=textOutput>
<input id=TaskFinished_label name=TaskFinished_label>
<input id=noparam_label name=noparam_label>
<OBJECT classid="clsid:4E17685A-AADE-4217-BB7A-ADAA530B26A4"
id=myatlobj
name=myatlobj
width="200"
height="200"
>
</OBJECT>
<button onclick="InitTask()" id="InitTask" name="InitTask" value="InitTask">InitTask</button><SCRIPT LANGUAGE="JScript">
function clickIt(result)
{
txtOutput.value = result;
}
function InitTask()
{
myatlobj.InitTask(1111);
}function set_label_text(obj,textvalue)
{
obj.value = textvalue;
}
</SCRIPT><script language=javascript for="myatlobj" event="NoParam()">
set_label_text(noparam_label, "NoParam")
</script>
<script language=javascript for="myatlobj" event="TaskFinished(arg1)">
set_label_text(TaskFinished_label, "TaskFinished")
</script>
</body>
</html><html>
<BODY onclick="myatlobj.InitTask(1111)" TOPMARGIN="0" LEFTMARGIN="0">
<input id=textOutput name=textOutput>
<input id=textOutput1 name=textOutput1>
<OBJECT ID="myatlobj" <
CLASSID="CLSID:4E17685A-AADE-4217-BB7A-ADAA530B26A4">
>
</OBJECT><SCRIPT LANGUAGE="VBScript">
<!--
Sub myatlobj_NoParam()
myatlobj.ForHtml = myatlobj.ForHtml + 1
End Sub-->
</SCRIPT>
</body>
</html>