2009-10-25 2 views
1

ATL을 사용하여 ActiveX 컨트롤을 작성했습니다. 마법사를 사용하여 public IConnectionPointContainerImpl<CActiveX>CProxy_IActiveXEvents<CActiveX>을 추가 한 연결 지점에 대한 지원을 추가했습니다. 여기서 CProxy_...은 이벤트를 발생시키는 마법사 생성 코드입니다. 다음과 같이자바 스크립트가 ActiveX 이벤트를 한 번만받습니다.

는 내가있는 dispinterface를 정의했습니다 :

[ UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A), helpstring ("액티브 이벤트") ] 있는 dispinterface의 _IActiveXEvents { 속성 : 메서드 : [id (1)] void receiveCertificate ([in] VARIANT_BOOL isPermissionGranted, [in] BSTR certificateXml); };

[default,source] dispinterface _IActiveXEvents으로 코크스에 포함시켰다. 이벤트를 발생 시키려면 마법사 코드에 정의 된 Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy())으로 전화하십시오.

다음 자바 스크립트 문제는 한 번만 이벤트를받을 수있는 이벤트

function ActiveXObject::receiveCertificate(permission, certificate) { 
     alert("alert!"); 
    } 

을받을 것이다, 나는 닫고 다시 이벤트를받을 얻기 위해 IE를 다시해야합니다. 내가 놓친 게 있니?

답변

1

누구든지 관심이있는 경우이 문제에 대한 해결책을 찾았습니다. ROT (실행중인 개체 테이블)에 개체를 등록했지만 이전의 기존 등록을 취소하지 않았습니다. 따라서 여러 개의 등록이 나타났습니다. 이전 등록을 취소하면 이벤트가 안정적으로 발동되었습니다.

관련 문제