Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use DLL in PHP?

Tags:

php

dll

com

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 running out of Apache? In my journey around the internets i believe that i have 2 options:

  1. compile the dll as an extension for PHP. (i didn't make this dll)
  2. access the DLL as a COM object which is sort of what it's designed for anyways.

So i'm taking the COM approach.

try{
  $com = new COM('WHAT_GOES_HERE');
} catch(Exception $e){
    echo 'error: ' . $e->getMessage(), "\n";
}

How do i go about finding out what would go into the initialization string? is there a com viewer type program i could/should be using to find this out? the documentation associated with this DLL doesn't seem to specify what strings i should be using to initialize but gets very in-depth into what streams are available, and all sorts of fun stuff. just gotta past this initial hump. Please help!

like image 315
Mike G Avatar asked Jul 07 '09 23:07

Mike G


People also ask

Can we use dll in PHP?

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.

Can we use COM component in PHP?

No, you can't.

How do I use a DLL file?

Open the folder with the DLL file. Once you find the folder, hold the Shift key and right-click the folder to open the command prompt directly in that folder. Type "regsvr32 [DLL name]. dll" and press Enter.


2 Answers

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.

like image 119
inerte Avatar answered Sep 23 '22 23:09

inerte


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);
    }
}
like image 40
Zsolti Avatar answered Sep 21 '22 23:09

Zsolti