2016-05-16 4 views
2

Я разрабатываю веб-приложение, использующее CakePHP на стороне сервера, и мне нужно использовать DLL, предоставленную сторонним лицом для доступа к их платформе, поэтому у меня нет исходного кода dll, и я не могу измените его. Я искал об этом, и я не нашел простого способа сделать это.Какой лучший способ загрузить dll в php?

Каков наилучший способ загрузки dll в php?

Должен ли я построить расширение php, которое действует как оболочка для сторонней DLL?

Есть ли другой способ?

Заранее спасибо.

UPDATE

Я обнаружил, что я могу использовать DLL в качестве COM-объекта, но мне нужно будет зарегистрировать DLL на Windows, каждый раз, когда клиент должен развернуть сервер, и я хотел бы решение, которое не связано с регистрацией dll.

UPDATE

Я пытался регистрации DLL, но я получил сообщение об ошибке («точка входа DllRegisterServer не был найден»), что означает, что, вероятно, не компилируется для использования в качестве COM-объекта. Я думаю, что единственными вариантами являются создание расширения PHP для C/C++, которое обертывает DLL или создает COM-объект C++/C#, который обертывает DLL и использует его, используя расширение DOTNET php.

+0

Вы работаете в Windows, не так ли? Вам понадобится сочетание PHP ['exec()') (http://php.net/manual/en/function.exec.php) и http://stackoverflow.com/questions/3044395/how-do- i-execute-a-dll-file – MonkeyZeus

+0

Я не думаю, что это будет сделано, потому что мне нужно вызвать метод внутри dll, который вернет объект, а затем вызовет некоторые методы из этого объекта. Я обнаружил, что я могу использовать DLL как COM-объект, но мне нужно будет регистрировать DLL в Windows каждый раз, когда клиенту нужно развернуть сервер. –

+0

Не мог ли ваш сценарий развертывания автоматически регистрировать DLL? – CherryDT

ответ

1

я в конечном итоге реализации видимого Wrapper .NET COM для DLL, я импортированы функции библиотек DLL, как это:

[DllImport("dapi.dll", EntryPoint = "#100", PreserveSig = false, 
     CallingConvention = CallingConvention.StdCall)] 
    public static extern Idapi CreateDapi(); 

Я зарегистрировал обертка как COM объекта с помощью утилиты regasm.exe в CMD:

regasm /codebase dapiWrapper.dll 

И в PHP я инстанциирован СОМ объект вроде этого:

$this->dapiCom = new COM("DapiWrapper.DapiWrapper") or die("Error");