Hallo zusammen,
ich besitze eine dll, welche ich mit C# programmiert habe.Zudem habe ich in Visual Studio die Eigenschaft "Com visible" aktiviert. Nun möchte ich Funktionen von dieser dll aus einem PHP Skript heraus aufrufen. Dazu hatte ich ein bisschen gegoogelt und bin auf die PHP Klasse "DOTNET" gestoßen, mit der ich .Net assemblies laden kann, indem ich beim instanziieren der Klasse DOTNET dem Konstruktor den vollständigen Namen des assembly, welches sich im globalen assembly cache befinden muss, angeben. Als zweiten Parameter erwartet der Konstruktor den vollständigen Klassennamen der dll, die instanziiert werden soll. Das ganze funktioniert auch wunderbar. Das einzige Problem was ich jetzt noch habe ist, dass ich die Klasse nur beim ersten Aufruf erfolgreich instanziieren kann. Mache ich nun einen "Refresh" der Seite, dann crasht der Apache Server und startet sich neu. Anschließend geht es wieder und beim zweiten mal nicht. Ich vermute, dass die geladene Speicherressource (DLL) nicht korrekt freigegeben wird. Das selbe Problem wurde auch schon hier diskutiert. Eine Lösungsmöglichkeit wäre laut dem Beitrag, das apache modul zu deaktivieren und dafür php-cgi zu verwenden. Leider konnte ich dazu noch keine passende Anleitung bzgl. Windows finden. Kann mir jemand zu diesem Problem helfen? Wäre für jede Antwort dankbar.
Gruß, JeyB
ich besitze eine dll, welche ich mit C# programmiert habe.Zudem habe ich in Visual Studio die Eigenschaft "Com visible" aktiviert. Nun möchte ich Funktionen von dieser dll aus einem PHP Skript heraus aufrufen. Dazu hatte ich ein bisschen gegoogelt und bin auf die PHP Klasse "DOTNET" gestoßen, mit der ich .Net assemblies laden kann, indem ich beim instanziieren der Klasse DOTNET dem Konstruktor den vollständigen Namen des assembly, welches sich im globalen assembly cache befinden muss, angeben. Als zweiten Parameter erwartet der Konstruktor den vollständigen Klassennamen der dll, die instanziiert werden soll. Das ganze funktioniert auch wunderbar. Das einzige Problem was ich jetzt noch habe ist, dass ich die Klasse nur beim ersten Aufruf erfolgreich instanziieren kann. Mache ich nun einen "Refresh" der Seite, dann crasht der Apache Server und startet sich neu. Anschließend geht es wieder und beim zweiten mal nicht. Ich vermute, dass die geladene Speicherressource (DLL) nicht korrekt freigegeben wird. Das selbe Problem wurde auch schon hier diskutiert. Eine Lösungsmöglichkeit wäre laut dem Beitrag, das apache modul zu deaktivieren und dafür php-cgi zu verwenden. Leider konnte ich dazu noch keine passende Anleitung bzgl. Windows finden. Kann mir jemand zu diesem Problem helfen? Wäre für jede Antwort dankbar.
PHP:
<?php
try
{
$lDotNet = new DOTNET("System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null", "System.Windows.Forms.Form") or die("not created");
die("created");
}
catch(Exception $lEx)
{
echo "Error occured:<br>".$lEx->GetMessage();
}
?>
Gruß, JeyB
Zuletzt bearbeitet: