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