1<?php 2 3namespace Safe; 4 5use Safe\Exceptions\ComException; 6 7/** 8 * Instructs COM to sink events generated by 9 * comobject into the PHP object 10 * sinkobject. 11 * 12 * Be careful how you use this feature; if you are doing something similar 13 * to the example below, then it doesn't really make sense to run it in a 14 * web server context. 15 * 16 * @param object $comobject 17 * @param object $sinkobject sinkobject should be an instance of a class with 18 * methods named after those of the desired dispinterface; you may use 19 * com_print_typeinfo to help generate a template class 20 * for this purpose. 21 * @param mixed $sinkinterface PHP will attempt to use the default dispinterface type specified by 22 * the typelibrary associated with comobject, but 23 * you may override this choice by setting 24 * sinkinterface to the name of the dispinterface 25 * that you want to use. 26 * @throws ComException 27 * 28 */ 29function com_event_sink(object $comobject, object $sinkobject, $sinkinterface = null): void 30{ 31 error_clear_last(); 32 if ($sinkinterface !== null) { 33 $result = \com_event_sink($comobject, $sinkobject, $sinkinterface); 34 } else { 35 $result = \com_event_sink($comobject, $sinkobject); 36 } 37 if ($result === false) { 38 throw ComException::createFromPhpError(); 39 } 40} 41 42 43/** 44 * Loads a type-library and registers its constants in the engine, as though 45 * they were defined using define. 46 * 47 * Note that it is much more efficient to use the configuration setting to pre-load and 48 * register the constants, although not so flexible. 49 * 50 * If you have turned on , then 51 * PHP will attempt to automatically register the constants associated with a 52 * COM object when you instantiate it. This depends on the interfaces 53 * provided by the COM object itself, and may not always be possible. 54 * 55 * @param string $typelib_name typelib_name can be one of the following: 56 * 57 * 58 * 59 * The filename of a .tlb file or the executable module 60 * that contains the type library. 61 * 62 * 63 * 64 * 65 * The type library GUID, followed by its version number, for example 66 * {00000200-0000-0010-8000-00AA006D2EA4},2,0. 67 * 68 * 69 * 70 * 71 * The type library name, e.g. Microsoft OLE DB ActiveX Data 72 * Objects 1.0 Library. 73 * 74 * 75 * 76 * PHP will attempt to resolve the type library in this order, as the 77 * process gets more and more expensive as you progress down the list; 78 * searching for the type library by name is handled by physically 79 * enumerating the registry until we find a match. 80 * 81 * The filename of a .tlb file or the executable module 82 * that contains the type library. 83 * 84 * The type library GUID, followed by its version number, for example 85 * {00000200-0000-0010-8000-00AA006D2EA4},2,0. 86 * 87 * The type library name, e.g. Microsoft OLE DB ActiveX Data 88 * Objects 1.0 Library. 89 * @param bool $case_sensitive The case_sensitive behaves inversely to 90 * the parameter $case_insensitive in the define 91 * function. 92 * @throws ComException 93 * 94 */ 95function com_load_typelib(string $typelib_name, bool $case_sensitive = true): void 96{ 97 error_clear_last(); 98 $result = \com_load_typelib($typelib_name, $case_sensitive); 99 if ($result === false) { 100 throw ComException::createFromPhpError(); 101 } 102} 103 104 105/** 106 * The purpose of this function is to help generate a skeleton class for use 107 * as an event sink. You may also use it to generate a dump of any COM 108 * object, provided that it supports enough of the introspection interfaces, 109 * and that you know the name of the interface you want to display. 110 * 111 * @param object $comobject comobject should be either an instance of a COM 112 * object, or be the name of a typelibrary (which will be resolved according 113 * to the rules set out in com_load_typelib). 114 * @param string $dispinterface The name of an IDispatch descendant interface that you want to display. 115 * @param bool $wantsink If set to TRUE, the corresponding sink interface will be displayed 116 * instead. 117 * @throws ComException 118 * 119 */ 120function com_print_typeinfo(object $comobject, string $dispinterface = null, bool $wantsink = false): void 121{ 122 error_clear_last(); 123 $result = \com_print_typeinfo($comobject, $dispinterface, $wantsink); 124 if ($result === false) { 125 throw ComException::createFromPhpError(); 126 } 127} 128