Как создать C # DLL для использования в PHP - PullRequest
9 голосов
/ 24 октября 2011

Я использую C # .NET DLL с ASP.NET 2.0, и она работает сейчас. Я хочу использовать ту же DLL в PHP.

Я новичок в PHP; Кто-нибудь, пожалуйста, скажите мне, как использовать его в PHP или не могли бы вы поделиться примером?

Ответы [ 3 ]

9 голосов
/ 24 октября 2011

PHP имеет встроенное расширение только для Windows под названием DOTNET , которое позволяет использовать библиотеки .NET в приложении PHP.

Обратите внимание, что вам нужно убедиться, что ваши сборки объявлены как видимые COM:

[assembly: ComVisible(true)]

Вот два примера.

<?php
 $stack = new DOTNET("mscorlib", "System.Collections.Stack");
 $stack->Push(".Net");
 $stack->Push("Hello ");
 echo $stack->Pop() . $stack->Pop();
?>

Другой пример, демонстрирующий функциональность класса DOTNET:

<?php

$full_assembly_string = 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a8425bc35256e463';
$full_class_name = 'System.Windows.Forms.Form';
$form = new DOTNET($full_assembly_string, $full_class_name);

// code to add buttons, menus, text, etc

$form->Show();

$form_event = '';
while($form_event !== 'close') {

  // handle form functions and events

  }
?> 
2 голосов
/ 04 января 2013

вы используете PHP версии 5.4.7, у вас уже должен быть com_dotnet.dll, если у вас его нет, вы можете скачать его на " download " и добавить в свой ext / path в каталоге php.

Редактирование файла php.ini

extension=php_com_dotnet.dll
1 голос
/ 26 июля 2018

Что вам действительно нужно, так это:

  • Включение COM-видимости (я ошибался ранее)
  • Подпишите сборку (добавьте "stong"name ", используйте" sn.exe "для создания открытых-закрытых ключей)
  • Добавьте свою сборку в GAC (используйте" gacutil.exe ")
  • При изменении сборки перед добавлениемснова в GAC, убедитесь, что ваша AssemblyVersion (не FileVersion) изменяется / повышается (вы также можете понижаться)

(вы, вероятно, найдете эти инструментыв "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ ...", просто Google для их правильного использования, достаточно просто)


Это должно сделать.
В PHP (пример):
<?php
    // use this kind of name, not path to dll or whatever
    // print your assemblly's full name in .NET and use that
    $name = "YourAssembly, Version=1.1.1.1, Culture=neutral, PublicKeyToken=fe6263478ac";
    $obj = new DOTNET($name, "YourNamespace.YourClass");
    echo "success\n";
?>

О да, Вайбхав прав насчет "php.ini".Мне не нужно было редактировать это.У него были правильные значения (возможно, по умолчанию?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...