Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Dotnet Class

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    55

    Dotnet Class

    Salve!
    Ho provato di recente ad utilizzare la classe DOTNET di PHP ma con scarsi risultati!
    In pratica dovrei utilizzare una DLL scritta in C#.

    Problema 1. La dll non ha uno strong name quindi non riesco a registrarla nella CHACHE degli ASSEMBLY. Ho visto nell'unico esempio che ho trovato che il metodo DOTNET vuole il nome dell'assembly e non il nome fisico della dll...

    Ho provato ad ogni modo a passargli il PATH completo ma niente da fare.
    Ogni volta che lancio lo script ottengo il messaggio:

    Fatal error: Uncaught exception 'com_exception' with message 'Failed to instantiate .Net object [CreateInstance] [0x80131047] ' in C:\Programmi\Apache Group\Apache2\htdocs\xcom\comtest.php:4 Stack trace: #0 C:\Programmi\Apache Group\Apache2\htdocs\xcom\comtest.php(4): dotnet->dotnet('c:\DLL\nomeDLL...', 'Cap.WebServices...') #1 {main} thrown in C:\Programmi\Apache Group\Apache2\htdocs\xcom\comtest.php on line 4

    Se provo nuovamente ottengo il messaggio:
    Si è verificato un errore in apache http server .... .... .. questo programma verrà terminato

    La linea di codice che uso è questa:

    <?php
    $stack = new DOTNET("c:\DLL\nomeDLL.dll", "nomeDLL.miaclasse");

    ?>

    In rete non si trova molto..


  2. #2
    Creati un assembly con strong name che funga da proxy ed esponga al PHP le funzioni/classi dell'assembly originale che ti servono.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    55
    In pratica dici di creare un altro progetto al quale dare uno strong name e dal quale richiamare le funzioni dell'assembly che non riesco a registrare...

    Posso utilizzare assembly non registrati in altri progetti .NET?

    La funzione DOTNET di PHP lavora solo su assembly presenti nella GAC?

    Grazie 1000 per la dritta!

    In alternativa pensavo di fare un reverse engineering del file e ricreare il progetto..

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    55

    Un passo avanti

    Alla fine mi sono fatto mandare la DLL con l'opportuno Strong Name.

    In questo modo tramite il comando gacutil ho registraro la DLL nella GAC senza problemi.

    Con nuove speranze ho istanziato nuovamente la classe DOTNET di PHP...

    e FUNZIONA!

    Incredulo ho rieseguito lo script e...

    NON FUNZIONA!

    In pratica l'esecuzione funziona una volta si e una volta no.

    Prima quando non avevo registrato l'assembly al secondo tentativo ottenevo un errore di operazione non valida (finestrella di windows.. vuoi inviare etc) ora che dovrebbe essere tutto ok , al secondo tentativo ottengo una pagina "problema connessione al server etc".

    Ho trovato in rete qualche informazione.. gente che ha avuto la stesso problema ma nessuna soluzione.

    Ho cambiato strada...

    Ho utilizzato il comando

    regasm c:\cartella_dll\miadll.dll /tlb:miadll.tlb

    e successivamente ho registrato nuovamente la DLL nella GAC

    gacutil /i c:\cartella_dll\miadll.dll

    Fatto questo ho potuto utilizzare la classe COM di PHP al posto della classe DOTNET

    ..per ora sta filando tutto liscio!


    Spero possa essere utile a qualcuno!

    La procedura l'ho presa da un articolo che ho trovato in rete a questo indirizzo

    http://www.devarticles.com/c/a/PHP/U...mbly-in-PHP/1/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.