Phalanger и php библиотека для.net

У меня есть три класса php, которые я пытаюсь использовать в своем приложении.net. Я использовал Phalanger, чтобы взять эти три класса и создать файл.dll с помощью этой команды:

phpc /target:dll Client.php Crypt.php Exception.php

Который, конечно, выводил Client.dll, а также файлы Client.pdb.

Оттуда я пошел на VS2012 и создал новое приложение asp.net и добавил Client.dll в качестве ссылки. Однако я не вижу общедоступных методов ни в одном из классов, и в окне браузера объектов отображается:

Клиент> Клиент> Базовые типы> Объект (так что у меня есть только методы типа Объект)

Я попробовал этот метод / учебник, чтобы заставить его работать, который включает в себя приведение пользовательского интерфейса к вашему объекту, однако я получаю ошибку:

тип или имя пространства имен ScriptContext не найден

Что, конечно, означает, что он не знает, что или где ScriptContext. Однако этот урок с 2007 года, поэтому я не знаю, слишком ли он устарел или откуда мне взять этот класс?

Другой учебник, который я нашел, такой же старый. Это говорит:

Если вы хотите использовать существующий исходный код PHP (разработанный для стандартного интерпретатора) без изменений, вы должны использовать устаревший режим, но когда вы хотите разработать новый проект PHP, вы можете рассмотреть возможность использования чистого режима

Но я не могу найти шаг для унаследованного режима в документе и предпочел бы это вместо попытки "чистого" режима (так что мне не нужно изменять / редактировать мой существующий код php). Я попытался (в чистом режиме), однако он не скомпилируется (phalanger compile) с помощью команды выше (добавление в команду класса DynamicObject.php).

Как мне получить доступ к моим публичным методам в классе php?

1 ответ

Решение
phpc /target:dll Client.php Crypt.php Exception.php

создает DLL в устаревшем (стандартном) режиме. Эта DLL содержит "странные" пространства имен, необходимые для совместимости с семантикой PHP. (эти пространства имен отделяют код от разных файлов скриптов). Обзор взаимодействия.NET в блоге Phalanger 3.0 описывает, как использовать скрипты, скомпилированные в стандартном режиме.

Опция командной строки /pure+ говорит компилятору создать так называемую сборку в чистом режиме. В этом режиме компилятор объединяет все исходные файлы и компилирует их как один (как это делает C#) без каких-либо странных пространств имен. Если вы укажете [\Export] Атрибут выше объявления класса PHP, в результате DLL будет выглядеть так, как она будет скомпилирована из кода C#, и вы сможете ссылаться на него и использовать его классы в обычном режиме.

Другие вопросы по тегам