PHP ΠΈ COM

На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Win32 языком PHP ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для доступа ΠΊ COM- ΠΈ DCOM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

  1. Π― собрал DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для вычислСний. Каким способом Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ DLL-Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ PHP?
  2. Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ 'Unsupported variant type: xxxx (0xxxxx)'?
  3. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² PHP?
  4. МоТно Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² сСссии?
  5. Как ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ошибки COM?
  6. МоТно Π»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ DLL-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· PHP-скриптов Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Π² языкС Perl?
  7. Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
  8. Как COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра?
  9. Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ 'DCOM is disabled in C:\path...\scriptname.php on line 6', Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?
  10. Π£ΠΌΠ΅Π΅Ρ‚ Π»ΠΈ PHP Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ActiveX Π½Π° страницС?
  11. МоТно Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся?
  12. Как ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?
  13. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Ρ‘Ρ‚ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?
  14. Π˜Ρ‚Π°ΠΊ, PHP Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с модСлью COM, Π° Ρ‡Ρ‚ΠΎ насчёт Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ COM+?
  15. Π Π°Π· PHP ΡƒΠΌΠ΅Π΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слуТба MTS управляСт рСсурсами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² сочСтании PHP?
Π― собрал DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для вычислСний. Каким способом Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ DLL-Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ PHP?

PHP ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ просто DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ Ссли DLL-Ρ„Π°ΠΉΠ» содСрТит COM-сСрвСр ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс IDispatch, для PHP откроСтся доступ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ сСрвСру.

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ 'Unsupported variant type: xxxx (0xxxxx)'?

Π’ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… языках программирования ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ дСсятки Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… VARIANT ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ. Π‘ΠΎΜΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² PHP ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² языкС ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ Π½Π° 100 %. ΠœΠ΅ΠΆΠ΄Ρƒ PHP ΠΈ COM Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ индСксныС массивы. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, сообщитС ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ°Ρ… ΠΊΠ°ΠΊ ΠΎΠ± ошибкС, Ссли Π½Π΅ сдСлали это Ρ€Π°Π½ΡŒΡˆΠ΅, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PHP Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, ΠΈ Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² PHP?

Π”Π°, PHP ΡƒΠΌΠ΅Π΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP Ρ‡Π°Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ язык Π²Π΅Π±-скриптов ΠΈ запускаСтся Π² контСкстС Π²Π΅Π±-сСрвСра, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ появятся Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС сСрвСра. Доступ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· COM Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π° PHP ΠΏΠΈΡˆΡƒΡ‚ прилоТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² связкС с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ PHP-GTK.

МоТно Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² сСссии?

НСт, нСльзя, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ экзСмпляры COM Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ рСсурсы, ΠΎΠ½ΠΈ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС ΠΎΠ΄Π½ΠΎΠ³ΠΎ скрипта.

Как ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ошибки COM?

ΠœΠΎΠ΄ΡƒΠ»ΡŒ COM выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ com_exception, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ свойство code, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС.

МоТно Π»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ DLL-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· PHP-скриптов Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Π² языкС Perl?

НСт, для PHP Ρ‚Π°ΠΊΠΎΠ³ΠΎ инструмСнта Π½Π΅Ρ‚.

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?

Π­Ρ‚Π° ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ CLSID
  • DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ запросили, отсутствуСт
  • ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запросили, Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс IDispatch
Как COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра?

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ IP-адрСс ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ конструктора COM.

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ com.allow_dcom=true Π² Ρ„Π°ΠΉΠ»Π΅ php.ini

Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ 'DCOM is disabled in C:\path...\scriptname.php on line 6', Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» php.ini ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ com.allow_dcom=true.

Π£ΠΌΠ΅Π΅Ρ‚ Π»ΠΈ PHP Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ActiveX Π½Π° страницС?

Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ PHP. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ActiveX Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ссли ΠΈΡ… запросил HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Бвязи с PHP-скриптом здСсь Π½Π΅Ρ‚, поэтому прямоС взаимодСйствиС со стороны сСрвСра Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

МоТно Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся?

ЭкзСмпляр ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ½ΠΈΠΊΠ΅Ρ€Ρ‹ (Π°Π½Π³Π». monikers). ЭкзСмпляр ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠΉ ссылки Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр Word:

<?php

$word
= new COM("C:\docs\word.doc");

?>

Код создаст Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр, Ссли Π½Π΅Ρ‚ доступного Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ экзСмпляра, ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ дСскриптор Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ экзСмпляра, Ссли экзСмпляр доступСн.

Как ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

ΠŸΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ события ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ com_event_sink(). Π‘ΠΊΠ΅Π»Π΅Ρ‚ класса ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ° событий функция Π² PHP Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ функция com_print_typeinfo().

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Ρ‘Ρ‚ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠžΡ‚Π²Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ простой, насколько ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Π’ΠΎΡ‡Π½ΠΎ Π½Π΅ извСстно, Π½ΠΎ, скорСС всСго, Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π˜Ρ‚Π°ΠΊ, PHP Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с модСлью COM, Π° Ρ‡Ρ‚ΠΎ насчёт Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ COM+?

ВСхнология COM+ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ модСль COM Π·Π° счёт ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ управлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· слуТбу MTS ΠΈ MSMQ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½ΠΎ PHP Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

Π Π°Π· PHP ΡƒΠΌΠ΅Π΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слуТба MTS управляСт рСсурсами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² сочСтании PHP?

Π‘Π°ΠΌ PHP ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, ΠΎΡ‚ΠΊΠ°Ρ‚ Π½Π΅ инициируСтся. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ придётся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями самому.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 3 notes

up
17
Anonymous ΒΆ
20 years ago
Re: The Windows English CHM Sample with MS Word Automation.

I see that $Word->Release() is called after $Word->Quit().
This seems to be erroneous. Actually, $Word->Release() should not have to be called if proper COM garbage collection is taking place. Release() is a C++ construction not used in either Visual Basic or VBScript or even MS-JScript. Just to be sure, however, I ran the sample through php.exe (5.04 CLI on Windows XP SP1 with Office 2003) and got a RPC failed error on the line containing $Word->Release(). The rest of the sample works fine, and the results are as expected. So, I propose 2 scenarios:
      1.There is a problem with the documentation (more likely).
      2.There is a problem with PHP504 itself, as this problem is reproduced with any COM Automation call, not just Word.
up
14
junk.ghost@virgin dOtt net ΒΆ
21 years ago
It may be obvious to everyone else but...

If you want to write your own COM DLL in MSVC++6 and you want to pass it a string, you need the following in your .idl file:

HRESULT function_name([in] BSTR parameter_name,
                      [retval, out] BSTR * retval);

retval is the result of your function as a string to be passed back.

BSTR is an unsigned short *, so if you want to use your string with STL string etc. you may need to convert parameters to and from char *.

The burden of my message is that from PHP

$comThing = new COM("comThing.comThing");
print $comThing->function_name("Jeremy");

Jeremy will be marshalled as wide chars, which match BSTR.
up
9
codeslinger at compsalot dot com ΒΆ
19 years ago
in response to item #1 above:  "If this is a simple DLL there is no way yet to run it from PHP."

Answer: There are several different packages/add-ons to php that enable low level access to the windows api. One of the most popular of these packages is available at http://www.winbinder.org

Winbinder does have the ability to load a dll and call it's functions.  Winbinder also provides a large set of windows apis for creating windows and controls.  This is useful for creating stand-alone desktop apps.  It is a possible alternative to php-gtk.

I've had mixed results with Winbinder, some things work very well, others are buggy; source code is available.  It's worth a look, Evaluate carefully.