Use DLL in PHP?

前端 未结 3 942
生来不讨喜
生来不讨喜 2021-02-09 02:30

I\'m not going to lie. I\'m not all the familiar with Windows and COM objects. That\'s why i\'m here. First of all is it possible to access a DLL from within a PHP script runnin

相关标签:
3条回答
  • 2021-02-09 03:02

    You can simply develop a wrapper around your main dll and use this wrapper as an extension in your PHP. Some free tools like SWIG can generate this wrapper for you automatically by getting the header of your dll functions. I myself use this approach and it was easy and reliable.

    0 讨论(0)
  • 2021-02-09 03:05

    WHAT_GOES_HERE is the ProgID, Class ID or Moniker registered on the Operating System.

    Each of these can change for the same DLL registered on different machines. There are several ways to find what's the ProgID/CLSID/Moniker of a registered dll. You can search the web for "dll debugger", "dll export", "dll inspect" and you'll see several solutions, and also ways to show what functions the dll export so you can use them.

    The easiest way, you can just register the dll with Regsvr32.exe and search Window's register with regedit.exe for the dll's name, you might need to search several times until you find the key under \HKEY_CLASSES_ROOT\, which is the ProgID.

    The command dcomcnfg.exe shows a lot of information about COM objects.

    If you have Visual Studio, the OLE/COM Object Viewer (oleview.exe) might be useful.

    0 讨论(0)
  • 2021-02-09 03:05

    You can run dll functions (from dlls which are not php extensions) with winbinder. http://winbinder.org/ Using it is simple. You have to download php_winbinder.dll and include it in php.ini as an extension. In the php script you have to use something similar:

    function callDll($func, $param = "")
    {
        static $dll = null;
        static $funcAddr = null;
        if ($dll === null)
        {
            $dll = wb_load_library(<DLL PATH AND FILENAME>);
        }
        $funcAddr = wb_get_function_address($func, $dll);
        if ($param != "")
        {
            return wb_call_function($funcAddr,array(mb_convert_encoding($param,"UTF-16LE")));
        }
        else
        {
            return wb_call_function($funcAddr);
        }
    }
    
    0 讨论(0)
提交回复
热议问题