DOTNET() Aufruf
http://phpmagazin.de/itr/online_artikel/psecom,id,763,nodeid,62,_language,de.html
Es gibt PHP-Erweiterungen mit denen man .NET-Klassen ansprechen kann. Unter Windows und unter LINUX. Unter Windows ist die Klasse DOTNET() zuständig, diese Unterstützung ist automatisch installiert und aktiviert (PHP 5.2.5), siehe phpinfo()
< ?php
$zahlen = new DOTNET('mscorlib', 'System.Collections.ArrayList');
$zufall = new DOTNET('mscorlib', 'System.Random');
while ($zahlen->Count < 6) {
$zufallszahl = $zufall->Next();
$zufallszahl = intval(49 * $zufallszahl / 2147483648) + 1;
if (!$zahlen->Contains($zufallszahl)) {
$zahlen->Add($zufallszahl);
}
}
$zahlen->Sort();
for ($i = 0; $i < $zahlen->Count; $i++) {
echo $zahlen->Item($i) . " ";
}
?>
Folgende Schritte wurden durchgeführt um eine eigene Assembly über PHP ansprechen zu können (Windows):
- ComVisible-Attribut in der Klasse und in Assemblyinfo.cs auf true setzen
- Signierung einschalten (Schlüsseldatei wird erzeugt)
- Assembly nach c:windowsassembly kopieren, dabei wir automatisch PublicKeyToken erstellt und im Windows Explorer angezeigt
- der DOTNET() Aufruf muss Version und PublicKeyToken exakt enthalten. Die Klasse Test muss ggf. mit Namespace angegeben werden. Die Assembly DOTNET muss ohne .dll angebegen werden.
$test = new DOTNET('DOTNET, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=066fdca368afffe1', 'DOTNET.Test');
siehe auch http://de2.php.net/manual/en/class.dotnet.php
Offene Punkte
- Konfigurationsdateien
- Funktion unter LINUX/mono
Was funktioniert, was nicht
In Bezug auf folgenden Programmcode funktionieren:
- Rückgabe von String
- GetArray(): Rückgabe eines Arrays
- GetObject(): Rückgabe eines Objektes
- TransObject(): Übergabe eines Objektes
Es funktionieren nicht:
- GetList(): Rückgabe von List< >, der Rückgabewert ist leer.
PHP-Code
echo $test->GetName(); //OK
echo $test->GetObject()->name; //OK
//OK
$o = $test->GetObject();
$o->name = "Falk2";
echo $test->TransObject($o);
//OK
$a = $test->GetArray(); echo $a[0];
//geht nicht
$a = $test->GetList(); echo $a[0];
.NET-Klasse
namespace DOTNET
{
[ComVisible(true)]
public class Test2
{
public String name { get; set; }
}
[ComVisible(true)]
public class Test
{
public String GetName()
{
return "Falk";
}
public List< String> GetList()
{
List< String> list = new List< string>();
list.Add("Falk");
return list;
}
public String[] GetArray()
{
String[] array = new String[1];
array[0] = "Falk";
return array;
}
public Test2 GetObject()
{
Test2 test = new Test2();
test.name = "Falk";
return test;
}
public String TransObject(Test2 test)
{
return test.name;
}
}
}
Wir arbeiten mit Software von http://www.campus21.de.
Verantwortlich für angezeigte Daten ist der Webdomain-Eigentümer laut Impressum.