Anmelden

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;
  }
}
}
   
Top

Wir arbeiten mit Software von http://www.campus21.de.

Verantwortlich für angezeigte Daten ist der Webdomain-Eigentümer laut Impressum.

Suche