перезагрузка dll в программе winbinder (php gui)

Это первый раз, когда мне нужно загрузить dll nad, к сожалению, это не COM-версия COM serwer, поэтому я не могу использовать функции php com.

Я узнал, что можно использовать winbinder для этого, но до сих пор у меня не было такого большого успеха. Вот мой код:

define("PATH_SCRIPT", dirname(__FILE__) . "/"); define("PATH_DATA", PATH_SCRIPT); define("PATH_INC", PATH_SCRIPT . "include/"); define("PATH_RES", PATH_SCRIPT . "resources/"); //----------------------------------------------------------------- DEPENDENCIES include PATH_INC . "winbinder.php"; //-------------------------------------------------------------------- CONSTANTS define("APPNAME", "Xml Reader!"); // Application name // Control identifiers define("ID_ABOUT", 101); //-------------------------------------------------------------- EXECUTABLE CODE // Create main window, then assign a procedure and an icon to it $mainwin = wb_create_window(NULL, AppWindow, APPNAME . " - PHP " . PHP_VERSION, 320, 240); wb_set_handler($mainwin, "process_main"); wb_set_image($mainwin, PATH_RES . "hyper.ico"); // Create toolbar wb_create_control($mainwin, ToolBar, array( array(ID_ABOUT, NULL, "About this application", 13), ), 0, 0, 16, 15, 0, 0, PATH_RES . "toolbar.bmp"); // Create status bar $statusbar = wb_create_control($mainwin, StatusBar, APPNAME); // Create label control inside the window wb_create_control($mainwin, Label, "This is xml reader\n" . "application that will read xml.\n" . "from dll and write it to file.", 10, 70, 290, 80, 0, WBC_CENTER); // Enter application loop wb_main_loop(); /* Process main window commands */ function process_main($window, $id) { global $statusbar; switch($id) { case ID_ABOUT: $dll = wb_load_library("dll/OSOZMOK.dll"); //$funcAddr = wb_get_function_address('OSOZ_Release', $dll); $funcAddr = wb_get_function_address('GetDllVersion', $dll); $dll_info = wb_call_function($funcAddr); $funcAddr = wb_get_function_address('OSOZ_IsConnected', $dll); $dll_info2 = wb_call_function($funcAddr); wb_release_library($dll); wb_message_box($window, "DLL Returned: 1) ".$dll_info. " 2) ".$dll_info2); break; case IDCLOSE: // IDCLOSE is predefined wb_destroy_window($window); break; } } 

Он делает только 2 вещи: создает окно winbinder, и если вы нажмете «about», он загрузит dll и выполнит 2 функции.

Проблема в том, что я снова щелкнув, программа выйдет из строя …

Кроме того, вместо этих переменных, таких как TRUE или FALSE, я получаю intigers. OSOZ_IsConnected будет возвращать постоянный intiger, а OSOZ_Release выдаст случайную информацию.

Например:

введите описание изображения здесь

Я действительно сомневаюсь, что dll так или иначе ошибается. Это должно быть так, как я называю функции.

Альтернатива: есть ли другой способ загрузить dll (delphi) в php? Я хотел бы избежать изучения c ++ / c # только для обработки этой DLL, сохранения вывода xml в файл и чтения его в php: P.

Bigxx для тех, кто может помочь.

Related of "перезагрузка dll в программе winbinder (php gui)"

Кажется, что Winbinder просто недостаточно развит, чтобы справиться с этим. Я использовал c ++. Например

HINSTANCE hGetProcIDDLL = LoadLibrary ("path_to_dll.dll"); – от windows.h

ИЛИ

wxDynamicLibrary и .load из WxWidgets

wll обе делают.