Spolupráce programu AutoLISPu s jinou aplikací

Přehled informací

Spolupráce s jinými aplikacemi

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í:

Spolupráce s jinou aplikací pomocí importování knihovny typů

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.

Znalosti nutné pro importování knihovny typů

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 Excelu2000

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-"
  )

Poznámka - použití nástrojů Visual LISPu pro importované funkce

Po importování knihovny typů aplikace, je možné používat nástroje Visual LISPu pro získání informací o importovaných funkcí.

Navázání spojení s jinou aplikací

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ý.

Příklad navázání spojení s objektem aplikace MS Excel2000

  (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).

Spolupráce s jinou aplikací bez importování tabulky symbolů

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.