|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-04-13 17:45 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 01:00:01 2025 UTC |
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); ?> ---