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

Reply via email to