COM 및 .Net(Windows) com_event_sink

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

com_event_sink — COM 개체에서 PHP 개체로 이벤트 연결


설명

com_event_sink(variant $variant, object $sink_object, array|string|null $sink_interface = null): bool

COM이 variant에 의해 생성된 이벤트를 PHP 개체 sink_object로 싱크하도록 지시합니다.

이 기능을 사용하는 방법에 주의하십시오. 아래 예제와 비슷한 작업을 수행하는 경우 웹 서버 컨텍스트에서 실행하는 것은 의미가 없습니다.


매개변수

variant
sink_object
sink_object는 원하는 dispinterface의 이름을 따서 명명된 메서드가 있는 클래스의 인스턴스여야 합니다. 이 목적을 위한 템플릿 클래스를 생성하는 데 도움이 되도록 com_print_typeinfo()를 사용할 수 있습니다.
sink_interface
PHP는 variant과 관련된 typelibrary에 의해 지정된 기본 dispinterface 유형을 사용하려고 시도하지만, sink_interface를 사용하려는 dispinterface의 이름으로 설정하여 이 선택을 재정의할 수 있습니다.

반환 값

성공하면 true를, 실패하면 false를 반환합니다.


변경 로그

버전 설명
8.0.0 sink_interface는 이제 nullable입니다.

Examples

예제 #1 COM 이벤트 싱크 예제

                  
<?php
class IEEventSinker {
    var $terminated = false;

   function ProgressChange($progress, $progressmax) {
      echo "Download progress: $progress / $progressmax\n";
    }

    function DocumentComplete(&$dom, $url) {
      echo "Document $url complete\n";
    }

    function OnQuit() {
      echo "Quit!\n";
      $this->terminated = true;
    }
}
$ie = new COM("InternetExplorer.Application");
$sink = new IEEventSinker();
com_event_sink($ie, $sink, "DWebBrowserEvents2");
$ie->Visible = true;
$ie->Navigate("http://www.example.org");
while(!$sink->terminated) {
  com_message_pump(4000);
}
$ie = null;
?>
                  
                

메모

주의 PHP 8.0.0 이전에는 이벤트 핸들러에서 exit()를 호출하는 것이 지원되지 않으며 PHP가 중단될 수 있습니다. 이것은 이벤트 핸들러에서 예외를 발생시키고, 메인 코드에서 예외를 포착하고, 거기에서 exit()를 호출함으로써 해결될 수 있습니다.


기타