Zkompiloval
jsem
knihovnu
DLL
k
nějakým
výpočtům
.
Existuje
způsob
,
jak
tuto
knihovnu
spustit
pod
PHP
?
Pokud
je
to
jednoduchá
DLL
knihovna
,
zatím
ji
není
možné
spustit
z
PHP
.
Pokud
však
tato
knihovna
obsahuje
COM
server
,
můžete
k
ní
přistupovat
,
pokud
implementuje
interface
IDispatch
.
Co
znamená
'
Unsupported
variant
type
:
xxxx
(0xxxxx)
'
?
Existují
tucty
typů
VARIANT
a
jejich
kombinací
.
Většina
z
nich
je
již
podporována
,
ale
několik
z
nich
teprve
musí
být
implementováno
.
Pole
nejsou
podporována
plně
.
Mezi
PHP
a
COM
lze
vyměňovat
pouze
jednorozměrná
indexovaná
pole
.
Pokud
najdete
jiné
typy
,
které
nejsou
podporovány
,
ohlašte
je
prosím
jako
chybu
-
bug
(
pokud
již
nebyly
ohlášeny
)
a
poskytněte
o
nich
tolik
informací
,
kolik
můžete
.
Je
možné
v
PHP
manipulovat
vizuálními
objekty
?
Obecně
je
,
ale
protože
PHP
se
nejčastěji
používá
jako
webovský
skriptovací
jazyk
,
běží
v
prostředí
WWW
serveru
,
a
proto
se
vizuální
objekty
nezobrazují
na
ploše
displeje
serveru
.
Pokud
používáte
PHP
pro
aplikační
skriptování
,
např
.
společně
s
PHP-GTK
,
neexistuje
omezení
přístupu
a
manipulace
s
vizuálními
objekty
pomocí
COM
.
Mohu
ukládat
COM
objekty
do
session
?
Nemůžete
.
S
instancemi
COM
se
nakládá
jako
s
prostředky
a
proto
jsou
k
dispozici
pouze
v
kontextu
jediného
skriptu
.
Jak
mohu
zachycovat
chyby
COM
?
Momentálně
není
možné
zachycovat
chyby
COM
kromě
způsobů
poskytovaných
samotným
PHP
(
@
,
track_errors
,
..
.
)
,
nicméně
přemýšlíme
o
způsobu
,
jak
to
implementovat
.
Mohu
generovat
knihovny
DLL
z
PHP
skriptů
,
podobně
jako
v
Perlu
?
Ne
,
v
PHP
bohužel
není
takový
nástroj
k
dispozici
.
Co
znamená
'
Unable
to
obtain
IDispatch
interface
for
CLSID
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
'
?
Tato
chyba
může
mít
více
příčin
:
Jak
lze
spustit
objekt
COM
ze
vzdáleného
serveru
?
Přesně
tak
,
jak
spouštíte
místní
objekty
.
Musíte
pouze
použít
IP
adresu
vzdáleného
stroje
jako
druhý
parametr
konstruktoru
COM
.
Ujistěte
se
,
že
je
nastaveno
com.allow_dcom=true
v
souboru
php.ini
.
Zobrazilo
se
'
DCOM
is
disabled
in
C:\path...\scriptname.php
on
line
6
'
,
co
mám
dělat
?
Upravte
soubor
php.ini
-
nastavte
tam
com.allow_dcom=true
.
Lze
načíst
objekt
ActiveX
na
stránce
,
resp
.
s
ním
manipulovat
,
pomocí
PHP
?
To
nemá
s
PHP
nic
společného
.
Objekty
ActiveX
se
načítají
na
straně
klienta
,
pokud
jsou
vyžádány
HTML
dokumentem
.
Nemá
to
žádnou
souvislost
s
PHP
skriptem
a
proto
není
možná
žádná
přímá
interakce
na
straně
serveru
.
Je
možné
získat
běžící
instanci
komponenty
?
Je
to
možné
pomocí
"
monikerů
"
.
Pokud
chcete
získat
více
referencí
na
tutéž
instanci
,
můžete
vytvořit
tuto
instanci
tímto
způsobem
:
Toto
vytvoří
novou
instanci
,
pokud
není
k
dispozici
žádná
běžící
instance
,
resp
.
vrátí
handle
na
běžící
instanci
.
Existuje
způsob
,
jak
obsloužit
událost
odeslanou
z
objektu
COM
?
Mám
problémy
,
když
se
pokouším
vyvolat
metodu
objektu
COM
,
která
vystavuje
více
než
jeden
interface
.
Co
mám
dělat
?
Odpověď
je
stejně
tak
jednoduchá
,
jako
neuspokojivá
.
Nelze
to
říci
přesně
,
ale
asi
nemůžete
dělat
nic
.
Pokud
má
někdo
specifické
informace
o
tomto
problému
,
ať
laskavě
napíše
sem
.
Když
PHP
pracuje
s
COM
,
jak
je
to
s
COM+
?
COM
+
rozšiřuje
COM
rámec
pro
správu
komponent
přes
MTS
a
MSMQ
,
ale
není
to
nic
zvláštního
na
to
,
aby
PHP
muselo
takové
komponenty
podporovat
.
Jestliže
může
PHP
manipulovat
s
objekty
COM
,
lze
si
představit
použití
MTS
ke
správě
prostředků
komponent
společně
s
PHP
?
PHP
samotné
nemůže
zatím
obsluhovat
transakce
.
Proto
když
nastane
chyba
,
není
iniciován
žádný
rollback
.
Pokud
používáte
komponenty
,
které
podporují
transakce
,
budete
muset
implementovat
vlastní
mechanismus
správy
transakcí
.