php-src/ext/com_dotnet
Dmitry Stogov 7301994c28 Merge branch 'master' into phpng
* master: (46 commits)
  PHP_INT_MIN and _MAX tests
  NEWS and UPGRADING
  Added PHP_INT_MIN
  Fix wrong lenght size
  Bug #51096 - Remove unnecessary ? for first/last day of
  Moved streams related functions to xp_ssl.c
  Remove duplicate NEWS
  Update NEWS
  Update NEWS
  Update NEWS
  BFN
  BFN
  Fixed bug #67715 (php-milter does not build and crashes randomly).
  We need to turn off any strict mode here for this warning to show up
  Disable restrictions regarding arrays in constants at run-time. For the discussion around it, see the thread on the mailing list: http://www.mail-archive.com/internals@lists.php.net/msg68245.html
  Revert "Fix bug #67064 in a BC safe way"
  Updated NEWS for #67693
  Updated NEWS for #67693
  Fixed bug #67693 - incorrect push to the empty array
  add missing entry to NEWS
  ...

Conflicts:
	Zend/tests/errmsg_040.phpt
	Zend/tests/ns_059.phpt
	Zend/zend_language_parser.y
	Zend/zend_vm_def.h
	ext/openssl/openssl.c
	ext/reflection/php_reflection.c
	ext/session/session.c
	ext/spl/spl_directory.c
	ext/spl/spl_iterators.c
	ext/sqlite3/sqlite3.c
	ext/standard/array.c
2014-08-04 13:56:27 +04:00
..
tests Fixed bug #66431 Special Character via COM Interface (CP_UTF8) 2014-04-29 13:40:44 +02:00
com_com.c Fix missing type checks in various functions 2014-07-27 02:42:49 -07:00
com_dotnet.c Bump year 2014-01-03 11:08:10 +08:00
com_extension.c Use better data structures (incomplete) 2014-02-10 10:04:30 +04:00
com_handlers.c Bump year 2014-01-03 11:08:10 +08:00
com_iterator.c Bump year 2014-01-03 11:08:10 +08:00
com_misc.c Bump year 2014-01-03 11:08:10 +08:00
com_olechar.c Fixed bug #66431 Special Character via COM Interface (CP_UTF8) 2014-04-29 13:40:44 +02:00
com_persist.c Bump year 2014-01-03 11:08:10 +08:00
com_saproxy.c Bump year 2014-01-03 11:08:10 +08:00
com_typeinfo.c Bump year 2014-01-03 11:08:10 +08:00
com_variant.c Merge branch 'PHP-5.5' into PHP-5.6 2014-04-29 13:46:38 +02:00
com_wrapper.c Bump year 2014-01-03 11:08:10 +08:00
config.w32 Implement com_get_active_object() and a helper object for working with 2004-05-09 15:21:29 +00:00
CREDITS add credits 2003-08-14 20:48:06 +00:00
package.xml Typo 2007-03-14 09:58:14 +00:00
php_com_dotnet.h Bump year 2014-01-03 11:08:10 +08:00
php_com_dotnet_internal.h Bump year 2014-01-03 11:08:10 +08:00
README Fixup some constants and error handling. 2004-05-03 15:51:41 +00:00

This is the new php5 COM module.

It is not 100% backwards compatible with PHP 4 ext/com, but you should not miss
the "features" that have not been retained.

This module exposes 3 classes: variant, com and dotnet(*).
com and dotnet classes are descendants of the variant class; the only
difference between the three are their constructors.  Once instantiated, the
module doesn't make a distinction between them.

COM errrors are mapped to exceptions; you should protect your COM code using
the try..catch construct if you want to be able to handle error conditions.

Be warned that due to the way the ZE2 currently works, exceptions are only
"armed" at the time they are detected, but do not "detonate" until the end of
the statement.  So, code like this:

  $obj->foo[43]->bar();

Where the foo[43] access triggers an exception will continue to call the bar()
method on a null object and cause a fatal php error.

Default properties and array access:

$obj = new COM("...");
$obj[1]->foo();

The code above will use the type information for the object to determine its
default property and then access it.  In PHP 4, it was hard-coded to use the
"Items" member, which was wrong.

The default property will also be used by the casting support to determine the
value for the object.

Variants:

This implementation of COM takes a simpler approach than the PHP 4 version;
we only map a few native types to COM and vice-versa, leaving the more complex
things as variants.  This allows greater consistency of data when passing
parameters to and from COM objects (no data will be lost).  In addition, a
large number of the variant API has been mapped to PHP space so that you can
use it for working with the special variant decimal, currency and date time
types.  This could be used as a replacement for the bcmath extension, for
example.

You can use the new object casting hook to for a php-native representation of
a variant object:

$a = new variant(4);
$b = new variant(6);
$c = variant_add($a, $b);
echo $c; // outputs 10 as a string, instead of Object

Sample Script:

<?php
$word = new COM("word.application");
print "Loaded Word, version {$word->Version}\n"; 
$word->Visible = 1; 
$word->Documents->Add(); 
$word->Selection->TypeText("This is a test..."); 
$word->Documents[1]->SaveAs("Useless test.doc"); 
$word->Quit(); 
?>

TODO:

- documentation

* dotnet support requires that you have the mscoree.h header from the .net sdk
  when you build the module.