Edit report at https://bugs.php.net/bug.php?id=41078&edit=1
ID: 41078 Comment by: user at kkdf2 dot sakura dot ne dot jp Reported by: mail at brutos dot org Summary: Its not possible to call Static dotNet Classes with dotnet Status: Assigned Type: Bug Package: COM related Operating System: Windows Vista Ultimate x86 PHP Version: 5CVS-2007-04-13 (snap) Assigned To: wez Block user comment: N Private report: N New Comment: It needs help of the wrapper class to be done. --- using System; using System.Reflection; using System.Runtime.InteropServices; namespace StaticWrapper { [ComVisible(true), Guid("1b74f314-1536-4cbb-8e01-752a17b1079f")] public class Class1 { public Object Call(String typeName, String methodName, Object[] args) { return Type.GetType(typeName, true).InvokeMember(methodName, BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, args); } public Object GetField(String typeName, String methodName) { return Type.GetType(typeName, true).InvokeMember(methodName, BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, new Object[0]); } public Object SetField(String typeName, String methodName, Object arg) { return Type.GetType(typeName, true).InvokeMember(methodName, BindingFlags.Public | BindingFlags.Static | BindingFlags.SetField, null, null, new Object[] { arg }); } public Object GetProperty(String typeName, String methodName) { return Type.GetType(typeName, true).InvokeMember(methodName, BindingFlags.Public | BindingFlags.Static | BindingFlags.GetProperty, null, null, new Object[0]); } public Object SetProperty(String typeName, String methodName, Object arg) { return Type.GetType(typeName, true).InvokeMember(methodName, BindingFlags.Public | BindingFlags.Static | BindingFlags.SetProperty, null, null, new Object[] { arg }); } } } --- example to use --- <?php $x = new COM("StaticWrapper.Class1"); print $x->Call("System.Console, mscorlib", "WriteLine", array("Hello {0}", "php")); print "\n"; print $x->GetField("System.Decimal", "MaxValue"); print "\n"; print $x->GetProperty("System.DateTime", "Now"); print "\n"; //$x->SetField("System.String", "Empty", ""); //$x->SetProperty("System.Net.ServicePointManager, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", "MaxServicePoints", 0); ?> --- Previous Comments: ------------------------------------------------------------------------ [2012-12-09 23:51:18] ben at nullcreations dot net Reproduced in Windows 7 using php 5.4.9 ------------------------------------------------------------------------ [2007-04-13 17:45:35] mail at brutos dot org Description: ------------ You can call non static classes like System.Collections.Stack or System.Text.StringBuilder But no static classes like System.Console. Reproduce code: --------------- <?php $console = new DOTNET("mscorlib", "System.Console"); $console->WriteLine("Hello World!"); ?> Expected result: ---------------- Hello World! Actual result: -------------- Fatal error: Uncaught exception 'com_exception' with message 'Failed to instanti ate .Net object [CreateInstance] [0x80131513] ' in C:\Users\Brutos\Desktop\test.php:2 Stack trace: #0 C:\Users\Brutos\Desktop\test.php(2): dotnet->dotnet('mscorlib', 'System.Console') #1 {main} thrown in C:\Users\Brutos\Desktop\test.php on line 2 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=41078&edit=1