Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP: Ссылки, указатели, WINAPI и DynamicWrapperX

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vo1ty
Отправлено: 13 Ноября, 2012 - 11:16:32
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Доброго времени суток! Думал написать на PHP приложение, использующее Windows API. Сначала решил узнать, как оно вообще, можно ли вообще это сделать.

w32api уже использовать нельзя, его выпилили из PHP, насколько я знаю.
Поэтому вариант выбрал следующий: Использую DynamicWrapperX (http://www[dot]script-coding[dot]com/dynwrapx[dot]html ) и COM, который из PHP разработчики ещё не выдернули. И, в общем-то, это работает для простых вызовов вроде MessageBoxA();.

Проблема здесь не одна, а целых две. Первая заключается в том, что некоторые функции требуют им передать ссылку на какую-нибудь структуру.
Структура? А что такое структура?
CODE (text):
скопировать код в буфер обмена
  1. struct POINT { int x; int y; }

Памяти, насколько мне известно, эта структура занимает 8 байт (если, конечно, int занимает 4 байта). Первые 4 для переменной x, последние - для y.
Есть ли подобные конструкции в PHP? Вот вопрос.
Вот страничка официального сайта PHP:
http://www.php.net/manual/ru/spl...tastructures.php
Здесь есть несколько видов структур данных, но, кажется, ни один из них не подходит, кроме, казалось бы, "Массивов". Описание:
Цитата:
структуры, которые хранят данные в непрерывном виде, доступные через индексы

Может показаться, будто это то, что нужно, но на деле, наверное, это обычный массив, как в C/C++.

Вторая проблема. Структуры явно не передаются параметрами функции Win32API, они передаются по ссылкам. PHP умеет принимать аргументы пользовательских функций "по ссылке", но передаются они при этом самым обычным способом, так, будто это и не ссылка.
CODE (text):
скопировать код в буфер обмена
  1. function a ($s)
  2. {
  3. // ...
  4.   $s = 1; // $s - копия переменной $b
  5. }
  6. $b = 10;
  7. a($b); // передаём копию переменной $b
  8. echo $b; // выведет 10
  9.  
  10.  
  11. function c (&$lnk) // принимаем ссылку
  12. {
  13. // ...
  14.   $lnk = 30 // устанавливаем значение $d в 30
  15. }
  16. $d = 15;
  17. c($d); // ПЕРЕДАЁМ ТАК, КАК ОБЫЧНУЮ ПЕРЕМЕННУЮ
  18. echo $d; // 30

Поэтому я совсем не уверен, что вообще можно передать именно ссылку. Но надеюсь, что ошибаюсь.

В любом случае, хотя бы одна из этих проблем существует, потому что, казалось бы, верный код:
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. $com = new COM("DynamicWrapper");
  3. $com->Register("user32", "GetCursorPos", "i=h", "r=l");
  4.  
  5. $c = new SplFixedArray(2);
  6. $com->GetCursorPos($c);
  7. ?>

Выдаёт такую ошибку:
Цитата:
PHP Fatal error: Uncaught exception 'com_exception' with message 'Error [0x80070057] Параметр задан неверно.
' in D:\CODE\php\dynwrap.php:4
Stack trace:
#0 D:\CODE\php\dynwrap.php(4): com->GetCursorPos(Object(SplFixedArray))
#1 {main}
thrown in D:\CODE\php\dynwrap.php on line 4

Надеюсь, кто-нибудь знает, как решить такую проблему.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB