![]()
Spolupráce AutoLISPu s jinými aplikacemi je obdobná jako spolupráce AutoLISPu s ActiveX rozhraním. V AutoLISPu jsou dva základní postupy zajištění spolupráce s jinou aplikací:
Abychom mohli pracovat s ActiveX rozhraním jiné aplikace, musíme nejprve importovat knihovnu typů druhé aplikace. K importování knihovny typů slouží příkaz vlax-import-type-library (více informací o příkazu se dozvíte v referenční příručce AutoLISPu).
Po importování cesty si AutoCAD vytvoří tzv. zabalené (wrapped) funkce = funkce z knihovny typů (s definovanými prefixy). Jestli se Vám tyto funkce zdají povědomé, je to správně. V podstatě stejný přístup používá i AutoCAD při přidání funkcí pro spolupráci s rozhraním ActiveX (všechny funkce s prefixem vla-). Funkce jsou totiž vytvořeny importováním knihovny typů AutoCADu.
![]()
Před importováním knihovny typů musíme nejdřív zjistit umístění a jméno požadované knihovny typů, případně, když neuvedeme ke knihovně typů plnou cestu, musí knihovna ležet v prohledávací cestě AutoCADu. Abychom jsme se obešli bez přesného zadání knihovny typů můžeme nechat zadání cesty na uživateli Vaší aplikace.
Poznámka - jména a nejčastější umístění knihoven typů aplikací MS Office
![]()
Příklad importování knihovny typů MS Excelu, která je umístěná na disku C v adresáři Microsoft Office/Office/. Pro jména metod použijeme prefix exlm-, pro jména vlastností použijeme prefix exlv- a pro jména konstant použijeme prefix exlk-.
  (vlax-import-type-library
    :tlb-filename "c:/excel9.olb"
    :methods-prefix "exlm-"
    :properties-prefix "exlv-"
    :constants-prefix "exlk-"
  )
  
![]()
Po importování knihovny typů aplikace, je možné používat nástroje Visual LISPu pro získání informací o importovaných funkcí.
V tuto chvíli již Visual LISP zná všechny funkce používané rozhraním ActiveX jiné aplikace. Abychom pomocí přidaných funkcí mohli s jinou aplikací pracovat, musíme si zpřístupnit její objekt Application. Zpřístupnění objektu uskutečníme pomocí funkce vlax-get-object nebo funkce vlax-create-object.
Funkcí vlax-get-object navážeme s aplikací spojení v případě, že aplikace (s kterou navazujeme spojení) je spuštěna. V opačném případu musíme použít funkci vlax-create-object - ta vytvoří objekt aplikace, spustí aplikaci. Pokud jsme museli použít funkci vlax-create-object není na první pohled nic vidět, musíme ještě použít funkci vla-put-visible. Ta způsobí, že vytvořený objekt aplikace je viditelný.
![]()
  (setq exlAppObj (vlax-get-object "Excel.Application.9"))
  (if (equal nil exlAppObj)
        ;;; test jestli aplikace Excel je spuštěna
    (progn
      (setq exlAppObj (vlax-create-object "Excel.Application.9"))
      (vla-put-visible exlAppObj :vlax-true)             
        ;;; nastavení vlastnosti viditelnost u objektu exlAppObj
        ;;; na true, všimněte si použití konstanty true ve 
        ;;; formátu ActiveX
    )
  )
  Pokud v kódu neuvedeme číslo aplikace (verze aplikace) bude použita verze aplikace, která bude v systému nalezena.
Další postup spolupráce (navázáni dokumentu atd.) závisí již na konkrétní aplikaci.
Při používání funkcí jiné aplikace používáme funkce klasickým způsobem (stejně jako funkce ActiveX AutoCADu viz příklad).
![]()
Importování tabulky symbolů přináší přes své nesporné výhody jednu podstatnou nevýhodu - při importování rozsáhlé tabulky symbolů (např. u aplikací MS Office) je značně zatěžována paměť RAM. Z tohoto důvodu nabízí Visual LISP alternativu spolupráce s jinou aplikací - spolupráci bez použití importu tabulky symbolů.
Visual LISP obsahuje tři funkce pro spolupráci s aplikací bez importování tabulky symbolů:
Před používáním funkcí z jiné aplikace musíme, stejně jako v předešlém příkladě, navázat spojení s aplikací.
Funkce jiné aplikace poté používáme pomocí výše uvedených funkcí ( vlax-invoke-method, vlax-get-property a vlax-put-property) viz příklad.
![]()