PHP Ρ– COM

PHP ΠΌΠΎΠΆΠ½Π° використати для доступу Π΄ΠΎ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² COM Ρ– DCOM Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Win32.

  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. Π§ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΠ²Π°Ρ‚ΠΈ/ΠΌΠ°Π½Ρ–ΠΏΡƒΠ»ΡŽΠ²Π°Ρ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ΠΎΠΌ ActiveX Π½Π° сторінці Π·Π° допомогою PHP?
  11. Π§ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΈΠΉ СкзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°?
  12. Π§ΠΈ Ρ” спосіб ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ ΠΏΠΎΠ΄Ρ–Ρ—, надісланої Π· об’єкта COM?
  13. НС ΠΌΠΎΠΆΡƒ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±'Ρ”ΠΊΡ‚Π° COM, який Ρ€Π΅Π°Π»Ρ–Π·ΡƒΡ” Π±Ρ–Π»ΡŒΡˆΠ΅ Π½Ρ–ΠΆ ΠΎΠ΄ΠΈΠ½ інтСрфСйс. Π©ΠΎ я ΠΌΠΎΠΆΡƒ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ?
  14. ΠžΡ‚ΠΆΠ΅, PHP ΠΏΡ€Π°Ρ†ΡŽΡ” Π· COM, як Ρ‰ΠΎΠ΄ΠΎ COM+?
  15. Π―ΠΊΡ‰ΠΎ PHP ΠΌΠΎΠΆΠ΅ ΠΊΠ΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚Π°ΠΌΠΈ COM, Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΌΠΈ уявити використання MTS для кСрування рСсурсами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ–Π² Ρƒ ΠΏΠΎΡ”Π΄Π½Π°Π½Π½Ρ– Π· PHP?
Π― Π·Ρ–Π±Ρ€Π°Π² DLL для ΠΎΠ±Ρ‡ΠΈΡΠ»Π΅Π½ΡŒ. Π―ΠΊΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ запустити Ρ†ΡŽ DLL Π² PHP?

Π―ΠΊΡ‰ΠΎ Ρ†Π΅ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Π° DLL, Ρ‚ΠΎ Ρ—Ρ— ΠΏΠΎΠΊΠΈ Ρ‰ΠΎ Π½Π΅ запустити Π· PHP. Π―ΠΊΡ‰ΠΎ DLL ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ COM сСрвСр, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ°Ρ‚ΠΈ доступ Π΄ΠΎ нього, якщо Π²Ρ–Π½ Ρ€Π΅Π°Π»Ρ–Π·ΡƒΠ²Π°Π² інтСрфСйс IDispatch.

Π©ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ” "Unsupported variant type: xxxx (0xxxxx)"?

Π„ дСсятки Ρ‚ΠΈΠΏΡ–Π² VARIANT Ρ‚Π° Ρ—Ρ…Π½Ρ–Ρ… ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ†Ρ–ΠΉ. Π‘Ρ–Π»ΡŒΡˆΡ–ΡΡ‚ΡŒ Π· Π½ΠΈΡ… Π²ΠΆΠ΅ ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡŽΡ‚ΡŒΡΡ, Π°Π»Π΅ ΠΊΡ–Π»ΡŒΠΊΠ° Ρ‰Π΅ Π½Π° стадії впровадТСння. Масиви ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡŽΡ‚ΡŒΡΡ Π½Π΅ ΠΏΠΎΠ²Π½Ρ–ΡΡ‚ΡŽ. Π’Ρ–Π»ΡŒΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΠΈΠΌΡ–Ρ€Π½Ρ– індСксовані масиви ΠΌΠΎΠΆΡƒΡ‚ΡŒ пСрСдаватися ΠΌΡ–ΠΆ PHP Ρ‚Π° COM. Π―ΠΊΡ‰ΠΎ Π²ΠΈ знайшли Ρ–Π½ΡˆΡ– Ρ‚ΠΈΠΏΠΈ, Ρ‰ΠΎ Π½Π΅ ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡŽΡ‚ΡŒΡΡ, ΠΏΠΎΠ²Ρ–Π΄ΠΎΠΌΡ‚Π΅, Π±ΡƒΠ΄ΡŒ ласка, ΠΏΡ€ΠΎ Π½ΠΈΡ…, як ΠΏΡ€ΠΎ Π²Π°Π΄Ρƒ (якщо Π²ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ²Ρ–Π΄ΠΎΠΌΠ»Π΅Π½ΠΎ) Ρ‚Π° Π½Π°Π΄Π°ΠΉΡ‚Π΅ ΡΠΊΠ½Π°ΠΉΠ±Ρ–Π»ΡŒΡˆΠ΅ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ—.

Π§ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ ΠΊΠ΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ Π²Ρ–Π·ΡƒΠ°Π»ΡŒΠ½ΠΈΠΌΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚Π°ΠΌΠΈ Π² PHP?

Π—Π°Π³Π°Π»ΠΎΠΌ Ρ‚Π°ΠΊ, Π°Π»Π΅ ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ PHP Ρ” мовою Π²Π΅Π±-сцСнаріїв, Ρ—Ρ— ΠΊΠΎΠ΄ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ”Ρ‚ΡŒΡΡ Π² контСксті вСбсСрвСра, Ρ‚ΠΎΠΌΡƒ Π²Ρ–Π·ΡƒΠ°Π»ΡŒΠ½Ρ– ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ Π½Ρ–ΠΊΠΎΠ»ΠΈ Π½Π΅ Π·'ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π° Ρ€ΠΎΠ±ΠΎΡ‡ΠΎΠΌΡƒ столі сСрвСрів. Π―ΠΊΡ‰ΠΎ Π²ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, використовуєтС PHP для написання ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ ΡΠΏΡ–Π»ΡŒΠ½ΠΎ Π· PHP-GTK, Ρ‚ΠΎ Π½Π΅ΠΌΠ° обмСТСнь доступу Π°Π±ΠΎ кСрування Π²Ρ–Π·ΡƒΠ°Π»ΡŒΠ½ΠΈΠΌΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· COM.

Π§ΠΈ я ΠΌΠΎΠΆΡƒ Π·Π±Π΅Ρ€Ρ–Π³Π°Ρ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ COM Π² сСсії?

Ні, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅. ЕкзСмпляри COM Ρ€ΠΎΠ·Π³Π»ΡΠ΄Π°ΡŽΡ‚ΡŒΡΡ як рСсурси, Ρ‚ΠΎΠΌΡƒ Π²ΠΎΠ½ΠΈ доступні лишС Π² контСксті ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСансу.

Π―ΠΊ я ΠΌΠΎΠΆΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈΡ‚ΠΈ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ COM?

Π ΠΎΠ·ΡˆΠΈΡ€Π΅Π½Π½Ρ COM Π²ΠΈΠΊΠΈΠ΄Π°Ρ” Π²ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ com_exception, які Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΎΠ²ΠΈΡ‚ΠΈ, Ρ‰ΠΎΠ± Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ– оглянути ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρƒ частину ΠΊΠΎΠ΄Ρƒ.

Π§ΠΈ я ΠΌΠΎΠΆΡƒ Π³Π΅Π½Π΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ„Π°ΠΉΠ»ΠΈ DLL скриптами PHP, Ρ‚Π°ΠΊ як Ρ†Π΅ Ρ€ΠΎΠ±ΠΈΠ² Π½Π° Perl?

Ні, Π½Π° Таль Π½Π° PHP Ρ‚Π°ΠΊΠΈΠΉ інструмСнт нСдоступний.

Π©ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ” "Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"?

Ця ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Π· Π΄Π΅ΠΊΡ–Π»ΡŒΠΊΠΎΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

  • Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ CLSID
  • Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Π° DLL відсутня
  • Π·Π°ΠΏΠΈΡ‚ΡƒΠ²Π°Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ Ρ€Π΅Π°Π»Ρ–Π·ΡƒΡ” інтСрфСйс IDispatch
Π―ΠΊ ΠΌΠ΅Π½Ρ– запускати ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ COM Π· Π²Ρ–Π΄Π΄Π°Π»Π΅Π½ΠΎΠ³ΠΎ сСрвСра?

Π’Π°ΠΊ само, як Ρ– Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ– ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ. Π’Π°ΠΌ лишС Ρ‚Ρ€Π΅Π±Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ конструктору COM IP Π²Ρ–Π΄Π΄Π°Π»Π΅Π½ΠΎΡ— машини.

ΠŸΠ΅Ρ€Π΅ΠΊΠΎΠ½Π°ΠΉΡ‚Π΅ΡΡ, Ρ‰ΠΎ Π²ΠΈ Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΠ»ΠΈ com.allow_dcom=true Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ php.ini.

Π― ΠΎΡ‚Ρ€ΠΈΠΌΡƒΡŽ "DCOM is disabled in C:\path...\scriptname.php on line 6", Ρ‰ΠΎ я ΠΌΠΎΠΆΡƒ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ?

Π’Ρ–Π΄Ρ€Π΅Π΄Π°Π³ΡƒΠΉΡ‚Π΅ ваш php.ini, задавши com.allow_dcom=true.

Π§ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΠ²Π°Ρ‚ΠΈ/ΠΌΠ°Π½Ρ–ΠΏΡƒΠ»ΡŽΠ²Π°Ρ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ΠΎΠΌ ActiveX Π½Π° сторінці Π·Π° допомогою PHP?

Π¦Π΅ Π½Π΅ ΠΌΠ°Ρ” Π½Ρ–Ρ‡ΠΎΠ³ΠΎ ΡΠΏΡ–Π»ΡŒΠ½ΠΎΠ³ΠΎ Π· PHP. Об'Ρ”ΠΊΡ‚ΠΈ ActiveX Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΡŽΡ‚ΡŒΡΡ Ρƒ ΠΊΠ»Ρ–Ρ”Π½Ρ‚ΡΡŒΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π·Π° Π·Π°ΠΏΠΈΡ‚ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° HTML. Π¦Π΅ Π½Π΅ ΡΡ‚ΠΎΡΡƒΡ”Ρ‚ΡŒΡΡ скрипту PHP, Ρ‚ΠΎΠΌΡƒ пряма взаємодія Π½Π° стороні сСрвСра Π½Π΅ΠΌΠΎΠΆΠ»ΠΈΠ²Π°.

Π§ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΈΠΉ СкзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°?

Π¦Π΅ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ завдяки псСвдонімам. Π―ΠΊΡ‰ΠΎ Ρ‚Ρ€Π΅Π±Π° ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ числСнні посилання Π½Π° Ρ‚ΠΎΠΉ самий СкзСмпляр слова, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ створити Ρ†Π΅ΠΉ СкзСмпляр, як ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ:

<?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 сам Ρ‰Π΅ Π½Π΅ обробляє Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†Ρ–Ρ—. Π’Π°ΠΊΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ, якщо Π²ΠΈΠ½ΠΈΠΊΠ°Ρ” ΠΏΠΎΠΌΠΈΠ»ΠΊΠ°, відкочування Π½Π΅ ΠΏΠΎΡ‡ΠΈΠ½Π°Ρ”Ρ‚ΡŒΡΡ. Π―ΠΊΡ‰ΠΎ Π²ΠΈ використовуєтС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, які ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡŽΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†Ρ–Ρ—, Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±Π° власноруч Ρ€Π΅Π°Π»Ρ–Π·ΡƒΠ²Π°Ρ‚ΠΈ управління транзакціями.

οΌ‹add a note

User Contributed Notes 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.