Wednesday, April 18, 2012


I'm quite a newbie in PHP and today I discovered DOTNET class.

So I studied manual, surfed the web to find some example and finally wrote my test app:

  1. Created a new DLL using Framework 4.0 Client Profile

  2. Signed the assembly with a strong name key

  3. Marked assembly as COM-Visible

This is the test code I wrote

using System;

namespace CSharpCOM
public class CSharpCOMClass
public string Base64(string s)
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(s));

I compiled the assembly and then registered in GAC (gacutil /if fullpath\CSharpCOM.dll).

If I use gacutil /l CSharpCOM I see

La cache di assembly globale contiene gli assembly seguenti:

csharpcom, Version=, Culture=neutral,
PublicKeyToken=beb607ae770f5750, processorArchitecture=MSIL

Numero di elementi = 1

So everything seems ok.

Then wrote this basic php:

$csclass = new DOTNET("CSharpCOM, Version=, Culture=neutral, " .
echo $csclass->Base64("Test string"),"\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";

Whatever I try, loading page hosted in Apache (http://localhost/test01/dotnet.php) I always get

Caught exception: Failed to instantiate .Net object [CreateInstance]
[0x80070002] Impossibile trovare il file specificato.

Translation could be: unable to find specified file

Just another thing: using some example (a very basic one here) I read that my assembly (when registered) should be found on %windir%\assembly, but I'm only able to find it in %windi%\Microsoft.NET\assembly\GAC_MSIL\CSharpCOM\v4.0_1.0.0.0__beb607ae770f5750: is this correct? Why don't I have it on first directory?

More: if I create another framework project and try to add a .NET reference I can't find my assembly: is this related to the fact I'm not able to load this assembly from PHP?

Last note: I tried it on Windows XP Professional SP3 32bit and on Windows Seven Enterprise 64bit


This works: $form = new DOTNET('System.Windows.Forms, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'System.Windows.Forms.Form');

No comments:

Post a Comment