Эта функция инициализирует библиотеку LuaCOM, создает общую таблицу luacom и заполняет её методами LuaCOM в заданной Lua структуре.
Обратите внимание, что перед этим необходимо инициализировать COM, при помощи OleInitialize или CoInitialize, или чего-то подобного.
Данная функция предназначена для очистки структур данных, связанных с LuaCOM в указанной Lua структуре (L). В настоящее время она не делает ничего, но в будущих версиях это станет возможным.
Так что не удаляйте её из своего кода! Она также должна вызываться перед завершением функций COM (OleUninitialize и CoInitialize) и перед lua_close.
int luacom_detectAutomation(lua_State *L, int argc, char *argv[]);
Описание
Данная функция получает из верхней части стека Lua таблицу, которая будет сохранять два поля, поименованные как “StartAutomation” и “Register” (эти поля должны содержать функции, реализующие эти действия).
Затем она разыскивает командную строку (представленную как argc и argv) для ключей “/Automation” или “/Register”. Если один из этих ключей найден, то вызывается соответствующая функция в таблице Lua.
В завершение она возвращает значение, сообщающее что произошло, так что вызывающая функция может изменить свой порядок действий (если это необходимо).
Эта функция просто помощник для реализации серверов Automation используя LuaCOM. Большая часть работы должна быть сделана в коде Lua, используя методы RegisterObject, NewObject, и ExposeObject.
Пример
/*
* com_object.cpp
*
* This sample C++ code initializes the libraries and
* the COM engine to export a COM object implemented in Lua
* Это пример кода на C++ для инициализации библиотек и
* COM движка для экспорта COM-объекта реализованного в Lua
*
*/
#include <ole2.h>
// libraries (библиотеки)
extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
#include <luacom.h>
int main (int argc, char *argv[])
{
int a = 0;
CoInitialize(NULL);
IupOpen();
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luacom_open(L);
luaL_dofile(L, "implementation.lua");
// Pushes the table containing the functions
// responsible for the initialization of the
// COM object
// Помещаем таблицу, содержащую функции
// отвечающие за инициализацию COM объекта
lua_getglobal(L, "COM");
// detects whether the program was invoked for Automation,
// registration or none of that
// определяем, вызывалась ли программа для автоматизации,
// регистрации или ничего этого не было
int result = luacom_detectAutomation(L, argc, argv);
switch(result)
{
case LUACOM_AUTOMATION:
// runs the message loop, as all the needed initialization
// has already been performed
// запускаем цикл обработки сообщений, так как все
// нужное для инициализации, уже выполнено
MessageLoop();
break;
case LUACOM_NOAUTOMATION:
// This only works as a COM server
// Это работает только как COM сервер
printf("Error. This is a COM server\n");
break;
case LUACOM_REGISTER:
// Notifies that the COM object has been
// registered
// Сообщаем, что COM объект был
// зарегистрирован
printf("COM object successfully registered.");
break;
case LUACOM_AUTOMATION_ERROR:
// detectAutomation found /Automation or /Register but
// the initialization Lua functions returned some error
// detectAutomation нашел /Automation или /Register, но
// Lua функции инициализации возвратили какую-то ошибку
printf("Error starting Automation");
break;
}
luacom_close(L);
lua_close(L);
CoUninitialize();
return 0;
}
-------
-- implementation.lua
--
-- This is a sample implementation of a COM server in Lua
-- Это пример реализации COM сервера в Lua
--
require "luacom"
-- This is the implementation of the COM object
-- Это реализация COM объекта
TestObj = {}
function TestObj:showWindow()
dialog.show()
end
function TestObj:hideWindow()
dialog.hide()
end
-- Here we create and populate the table to
-- be used with detectAutomation
-- Здесь мы создаем и заполняем таблицу
-- для использования с detectAutomation
COM = {}
-- This functions creates the COM object to be
-- exported and exposes it.
-- Эти функции создают COM объект, чтобы
-- экспортировать и выставить его.
function COM:StartAutomation()
-- creates the object using its default interface
-- создаем объект, используя его интерфейс по умолчанию
COMAppObject, events, e = luacom.NewObject(TestObj, "TESTE.Teste")
-- This error will be caught by detectAutomation
-- Эта ошибка будет выловлена detectAutomation
if COMAppObject == nil then
error("NewObject failed: "..e)
end
-- Exposes the object (выставляем объект)
cookie = luacom.ExposeObject(COMAppObject)
if cookie == nil then
error("ExposeObject failed!")
end
end
function COM:Register()
-- fills table with registration information
-- заполняем таблицу сведениями регистрации
local reginfo = {}
reginfo.VersionIndependentProgID = "TESTE.Teste"
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "teste.tlb"
reginfo.CoClass = "Teste"
reginfo.ComponentName = "Test Component"
reginfo.Arguments = "/Automation"
-- stores component information in the registry
-- сохраняем сведения компонента в реестре
local res = luacom.RegisterObject(reginfo)
if res == nil then
error("RegisterObject failed!")
end
end
function COM:UnRegister()
-- fills table with registration information
-- заполняем таблицу сведениями регистрации
local reginfo = {}
reginfo.VersionIndependentProgID = "TESTE.Teste"
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "teste.tlb"
reginfo.CoClass = "Teste"
-- removes component information from the registry
-- удаляем сведения компонента из реестра
local res = luacom.UnRegisterObject(reginfo)
if res == nil then
error("UnRegisterObject failed!")
end
end
luacom_IDispatch2LuaCOM
Прототип
int luacom_IDispatch2LuaCOM(lua_State *L, void *pdisp_arg);
Описание
Данная функция принимает указатель на IDispatch, создает объект LuaCOM для него и помещает его в стек Lua. Эта функция полезна, когда кто-то получает интерфейс для COM-объекта из кода C/C++ и хочет использовать его в Lua.
Данный метод находит идентификатор класса Class ID (CLSID), на который ссылается параметр ID и создает экземпляр объекта с этим Class ID. Если имеются какие-либо проблемы (не найден ProgID, ошибка при создании экземпляра (инстанцировании) объекта), метод возвращает значение nil.
Параметры
Параметр
Тип
ProgID
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
luacom_obj
объект LuaCOM значение nil
Пример
inet_obj = luacom.CreateObject("InetCtls.Inet")
if inet_obj == nil then
print("Error! Object could not be created!")
end
Этот метод находит исходный интерфейс по умолчанию объекта luacom_obj, создает экземпляр этого интерфейса, реализация которого задается по implementation_table и создает точку соединения между luacom_obj и реализованным исходным интерфейсом.
Любые вызовы, сделанные по luacom_obj к реализации исходного интерфейса, будут переведены в вызовы Lua к элементу функции, представленной в implementation_table.
Если метод успешно выполняется, то по implementation_table реализуется объект LuaCOM плюс возвращается cookie, который идентифицирует подключение; в противном случае возвращается значение nil.
Обратите внимание что для получения событий необходимо иметь цикл обработки сообщений Windows.
Параметры
Параметр
Тип
luacom_obj
объект LuaCOM
implementation_table
таблица или данные пользователя
Возвращаемые значения
Возвращаемый элемент
Возможные значения
implemented_obj
объект LuaCOM значение nil
cookie
число
Пример
events_handler = {}
function events_handler:NewValue(new_value)
print(new_value)
end
events_obj = luacom.Connect(luacom_obj, events_handler)
Данный метод разыскивает библиотеку типов, связанную с ProgID и пытается найти типовые сведения об интерфейсе по имени “interface name”.
Если все это обнаружено, то создается объект, чьей реализацией является таблица “impl table”, то есть, любой вызов метода или обращение к свойству этого объекта переводятся в вызовы или обращения к элементам этой таблицы.
Затем он делает объект LuaCOM для реализованного интерфейса и возвращает его.
Если во время обработки возникают какие-либо проблемы (не найден ProgID, не найден интерфейс, интерфейс не является диспинтерфейсом), метод возвращает значение nil.
Параметры
Параметр
Тип
impl_table
таблица или данные пользователя
ProgID
строка
interface_name
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
implemented_obj
объект LuaCOM значение nil
Пример
myobject = {}
function myobject:MyMethod()
print("My method!")
end
myobject.Property = "teste"
luacom_obj = luacom.ImplInterface(myobject, "TEST.Test", "ITest")
-- these are done via Lua (это сделано через Lua)
myobject:MyMethod()
print(myobject.Property)
-- this call is done through COM (этот вызов сделан через COM)
luacom_obj:MyMethod()
print(luacom_obj.Property)
Данный метод загружает библиотеку типов, чьим путем к файлу является “typelib path” и пытается разыскать типовые сведения интерфейса по имени “interface name”.
Если это выполнено, то создается объект, реализацией которого является “impl table”, то есть, любой вызов метода или обращение к свойству этого объекта переводится в вызовы или обращения к элементам таблицы.
Затем он делает LuaCOM объект для реализованного интерфейса и возвращает его.
Если в процессе появляются какие-либо проблемы (не найден ProgID, не найден интерфейс либо интерфейс не является диспинтерфейсом), метод возвращает значение nil.
Параметр “coclass name” является дополнительным (необязательным); он нужен только если получающийся объект LuaCOM должен быть передан методам Connect, AddConnection или ExposeObject.
Этот параметр определяет имя класса объекта Component Object (составной объект), которому принадлежит интерфейс, так как этот интерфейс может быть использован в более чем одном “coclass”.
Параметры
Параметр
Тип
impl_table
таблица или пользовательские данные
typelib_path
строка
interface_name
строка
coclass_name
строка (необязательный параметр)
Возвращаемые значения
Возвращаемый элемент
Возможные значения
implemented_obj
объект LuaCOM значение nil
Пример
myobject = {}
function myobject:MyMethod()
print("My method!")
end
myobject.Property = "teste"
luacom_obj = luacom.ImplInterfaceFromTypelib(myobject, "test.tlb",
"ITest", "Test")
-- these are done via Lua (это сделано через Lua)
myobject:MyMethod()
print(myobject.Property)
-- this call is done through COM (этот вызов сделан через COM)
luacom_obj:MyMethod()
print(luacom_obj.Property)
Первая версия метода находит идентификатор класса (Class ID) связанный с параметром ProgID и пытается разыскать работающий экземпляр объекта с этим Class ID.
Если имеется какая-либо проблема (не найден ProgID, нет работающего объекта), метод возвращает значение nil.
Вторая версия пытается найти объект по его moniker. Если существует какая-либо проблема, метод возвращает значение nil.
Параметры
Параметр
Тип
ProgID/moniker
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
luacom_obj
объект LuaCOM значение nil
Пример
excel = luacom.GetObject("Excel.Application")
if excel == nil then
print("Error! Could not get object!")
end
NewObject/NewControl
Применение
-- Creates a COM object (создаем COM объект)
implemented_obj, events_sink, errmsg = luacom.NewObject(impl_table, ProgID)
-- Creates an OLE control (создаем элемент управления OLE)
implemented_obj, events_sink, errmsg = luacom.NewControl(impl_table, ProgID)
Описание
Данный метод аналогичен ImplInterface, только делает шаг дальше: он находит интерфейс по умолчанию для ProgID и использует его типовые сведения.
То есть, этот метод создает Lua реализацию интерфейса по умолчанию COM-объекта. Это весьма целесообразно при реализации полного COM-объекта в Lua.
Также он создает точку подключения для отправления событий клиентскому приложению и возвращает её в качестве второго возвращаемого значения.
Если в процессе возникают какие-либо проблемы (не найден ProgID, интерфейс по умолчанию не является диспинтерфейсом и т.д.), метод возвращает дважды значение nil и возвращает сообщение об ошибке, в качестве третьего возвращаемого значения.
Для отправки событий клиентскому приложению, просто вызываются методы из возвращенной таблицы приемника событий.
Вызов метода будет переведен в вызовы COM для каждого подключения. Эти вызовы могут содержать параметры (как определено в типовых сведениях).
Параметры
Параметр
Тип
impl_table
таблица или пользовательские данные
ProgID
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
implemented_obj
объект LuaCOM значение nil
event_sink
таблица приемника событий значение nil
errmsg
error message in the case of failure значение nil
Пример
myobject = {}
function myobject:MyMethod()
print("My method!")
end
myobject.Property = "teste"
obj, evt, err = luacom.NewObject(myobject, "TEST.Test")
-- these are done via Lua (это сделано через Lua)
myobject:MyMethod()
print(myobject.Property)
-- this call is done through COM (этот вызов сделан через COM)
luacom_obj:MyMethod()
print(luacom_obj.Property)
-- here we sink events (здесь мы принимаем события)
evt:Event1()
ExposeObject
Применение
cookie = luacom.ExposeObject(luacom_obj)
Описание
Данный метод создает и регистрирует class factory для luacom_obj, так что его могут использовать другие работающие приложения.
Он возвращает cookie, который должен быть использован для отмены регистрации объекта. Если метод завершается ошибкой, он возвращает значение nil.
ВНИМАНИЕ: объект ДОЛЖЕН быть не зарегистрирован (используйте RevokeObject) перед вызовом luacom close или lua_close, в противном случае могут произойти необрабатываемые исключения.
Параметры
Параметр
Тип
luacom_obj
объект LuaCOM
Возвращаемые значения
Возвращаемый элемент
Возможные значения
cookie
число значение nil
Пример
myobject = luacom.NewObject(impl_table, "Word.Application")
cookie = luacom.ExposeObject(myobject)
function end_of_application()
luacom.RevokeObject(cookie)
end
RegisterObject
Применение
result = luacom.RegisterObject(registration_info)
Описание
Данный метод создает нужные записи реестра для объекта COM используя сведения в таблице registration_info. Если компонент успешно зарегистрирован, метод возвращает значение отличное от nil.
Таблица registration_info должна содержать следующие поля: VersionIndependentProgID Это поле должно содержать строку, обозначающую программный идентификатор (ProgID) компонента, например: “MyCompany.MyApplication”. ProgID Тоже самое, что и VersionIndependentProgID, но с номером версии, например: “MyCompany.MyApplication.2”. TypeLib Имя файла типовой библиотеки, описывающей компонент. Это имя файла должно содержать путь, если типовая библиотека не находится в одной папке с исполняемым файлом.
Примеры: mytypelib.tlb, c:\app\test.tlb, test.exe\1 (последний пример может быть использован когда типовая библиотека связана с исполняемым файлом в качестве ресурса). Control Должен быть true, если объект является контролом (элементом управления) OLE, и false или значение nil в противном случае. CoClass Имя класса компонента. Должна существовать запись coclass в типовой библиотеке с тем же самым именем или регистрация завершится ошибкой. ComponentName Это имя компонента, удобное для чтения человеком. Arguments Это поле определяет, какие аргументы будут предоставлены исполняемому файлу компонента при запуске через COM. Обычно оно содержит “/Automation”. ScriptFile Это поле указывает полный путь к файлу скрипта, который реализует компонент. Используется только для регистрации внутрипроцессных серверов.
Этот метод не является универсальным “инструментом регистрации” для компонентов COM, поскольку он предполагает, что регистрируемый компонент реализован работающим исполняемым файлом во время регистрации.
Параметры
Параметр
Тип
registration_info
таблица со сведениями регистрации
Возвращаемые значения
Возвращаемый элемент
Возможные значения
result
значение nil или не-nil
Пример
-- Lua registration code (Lua код регистрации)
function RegisterComponent()
reginfo.VersionIndependentProgID = "TESTE.Teste"
-- Adds version information (добавляем сведения о версии)
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "teste.tlb"
reginfo.CoClass = "Teste"
reginfo.ComponentName = "Test Component"
reginfo.Arguments = "/Automation"
reginfo.ScriptFile = "teste.lua"
local res = luacom.RegisterObject(reginfo)
return res
end
UnRegisterObject
Применение
result = luacom.UnRegisterObject(registration_info)
Описание
Данный метод удаляет записи реестра о COM объекте, с использованием сведений в таблице registration_info. Если регистрация компонента успешно отменена, метод возвращает значение не-nil.
Таблица registration_info должна содержать следующие поля: VersionIndependentProgID Это поле должно содержать строку, обозначающую программный идентификатор (ProgID) компонента, например: “MyCompany.MyApplication”. ProgID Тоже самое, что и VersionIndependentProgID, но с номером версии, например: “MyCompany.MyApplication.2”. TypeLib Имя файла типовой библиотеки, описывающей компонент. Это имя файла должно содержать путь, если типовая библиотека не находится в одной папке с исполняемым файлом.
Примеры: mytypelib.tlb, c:\app\test.tlb, test.exe\1 (последний пример может быть использован когда типовая библиотека связана с исполняемым файлом в качестве ресурса). CoClass Имя класса компонента. Должна существовать запись coclass в типовой библиотеке с тем же самым именем или регистрация завершится ошибкой.
Параметры
Параметр
Тип
registration_info
таблица со сведениями регистрации
Возвращаемые значения
Возвращаемый элемент
Возможные значения
result
значение nil или не-nil
Пример
-- Lua registration code (Lua код регистрации)
function UnRegisterComponent()
reginfo.VersionIndependentProgID = "TESTE.Teste"
-- Adds version information (добавляем сведения о версии)
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "teste.tlb"
reginfo.CoClass = "Teste"
local res = luacom.UnRegisterObject(reginfo)
return res
end
addConnection
Применение
cookie = luacom.addConnection(client, server)
Описание
Это метод соединяет два LuaCOM объекта, устанавливая server как приемник событий для client — то есть, клиент будет вызывать методы сервера для объявления событий (в соответствии с моделью COM).
Это будет работать, только если client поддерживает точки подключения типа server.
Если метод успешно выполнен, он возвращает cookie, который идентифицирует соединение; в противном случае, выдается сообщение об ошибке.
Параметры
Параметр
Тип
client
объект LuaCOM
server
объект LuaCOM
Возвращаемые значения
Возвращаемый элемент
Возможные значения
cookie
число
Пример
obj = luacom.CreateObject("TEST.Test")
event_sink = {}
function event_sink:KeyPress(keynumber)
print(keynumber)
end
event_obj = luacom.ImplInterface(
event_sink, "TEST.Test", "ITestEvents")
cookie = luacom.addConnection(obj, event_obj)
Данный метод возвращает userdata удерживая указатель интерфейса IUnknown на COM объект за luacom_obj.
Важно отметить, что Lua не дублирует пользовательские данные (userdata): множество вызовов GetIUnknown для одного и того же объекта LuaCOM будут возвращать одни и те же userdata.
Это означает, что счет ссылок на интерфейс IUnknown будет увеличиваться только один раз (то есть, первый раз userdata выталкиваются)
и будет уменьшаться, только когда все ссылки на эти userdata выйдут из сферы действия (то есть, когда userdata сносит сборщик мусора).
Одним из возможных вариантов использования этого метода является проверка ссылаются ли два LuaCOM объекта на один и тот же объект COM.
Параметры
Параметр
Тип
luacom_obj
объект LuaCOM
Возвращаемые значения
Возвращаемый элемент
Возможные значения
iunknown
userdata с IUnknown метатаблица значение nil
Пример
-- Creates two LuaCOM objects for the same COM object
-- (a running instance of Microsoft Word(R) )
-- Создаем два объекта LuaCOM для одного и того же COM объекта
-- (работающего экземпляра Microsoft Word(R) )
word1 = luacom.GetObject("Word.Application")
word2 = luacom.GetObject("Word.Application")
-- These two userdata should be the same
-- Оба userdata должны быть одинаковы
unk1 = luacom.GetIUnknown(word1)
unk2 = luacom.GetIUnknown(word2)
assert(unk1 == unk2)
isMember
Применение
answer = luacom.isMember(luacom_obj, member_name)
Описание
Этот метод возвращает true (то есть, значение отличное от значения nil), если существует метод или свойство luacom_obj по имени member_name.
Параметры
Параметр
Тип
luacom_obj
объект LuaCOM
member_name
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
answer
nil or non-nil
Пример
obj = luacom.CreateObject("MyObject.Test")
if luacom.isMember(obj, "Test") then
result = obj:Test()
end
StartLog
Применение
result = luacom.StartLog(log_file_name)
Описание
Данный метод активирует ведение журнала LuaCOM, записывая в файл журнала все произошедшие ошибки.
Если библиотека была собрана с параметром VERBOSE, он также записывает в журнал другие информационные сообщения, такие как создание и разрушение внутренних объектов LuaCOM, вызовы методов, и т.д.
Это может помочь отследить объект утечки. Метод возвращает значение true, если файл журнала может быть открыт, в противном случае возвращается значение false.
Параметры
Параметр
Тип
log_file_name
строка
Возвращаемые значения
Возвращаемый элемент
Возможные значения
result
логический
Пример
ok = luacom.StartLog("luacomlog.txt")
if not ok then
print("log not opened")
end
EndLog
Применение
luacom.EndLog()
Описание
Этот метод останавливает ведение журнала (если он был активирован), и закрывает файл журнала.
Параметры
Нет.
Возвращаемые значения
Нет.
Пример
luacom.EndLog()
GetEnumerator
Применение
e = luacom.GetEnumerator(luacom_obj)
Описание
Данный метод возвращает COM перечислитель для заданного объекта LuaCOM (если он был предоставлен).
Это тоже самое, что и вызов метода NewEnum, по крайней мере, для большинства объектов. Объект enumerator (перечислитель) описан в главе 3.5.1.
Параметры
Параметр
Тип
luacom_obj
объект LuaCOM
Возвращаемые значения
Возвращаемый элемент
Возможные значения
e
объект enumerator или значение nil
Пример
-- Prints all sheets of an open Excel Application
-- Выводим все листы открытого приложения Excel
excel = luacom.GetObject("Excel.Application")
e = luacom.GetEnumerator(excel.Sheets)
s = e:Next()
while s do
print(s.Name)
s = e:Next()
end
6.3 Lua Extended API
pairs
GetType
CreateLocalObject
CreateInprocObject
LoadConstants
FillTypeInfo
FillTypeLib
6.4 Объект Enumerator
Объект перечислитель (enumerator) является посредником для интерфейса IEnumVARIANT. Он может быть получен при помощи API метода GetEnumerator.
Методы
Next возвращает следующий объект в перечислении или значение nil, если перечисление закончилось. Skip пропускает следующий объект, возвращая значение true при успешном выполнении и значение false если это не так. Reset перезапускает перечислитель. Clone возвращает новый перечислитель в том же состоянии.
6.5 Объект Type Library (библиотека типов)
Объект библиотека типов является посредником для интерфейса ITypeLib. Она может быть получена при помощи API метода LoadTypeLibrary или метода объекта type information GetTypeLib.
Методы
GetDocumentation возвращает таблицу содержащую поля name, helpstring, helpcontext и helpfile для библиотеки типов. GetTypeInfoCount возвращает число описаний типов, содержащихся в библиотеке типов. GetTypeInfo(n) возвращает объект type information для n-ного описания типа. ShowHelp пытается запустить файл справки, связанный с библиотекой типов (если таковой имеется).
6.6 Объект Type Information
Объект type information является посредником для интерфейса ITypeInfo. Он может быть получен с помощью метода API GetTypeInfo или метода объекта type library GetTypeInfo.
Методы
GetTypeLib возвращает содержащий объект type library. GetFuncDesc(n) возвращает таблицу с отображением n-ной функции описания типа.
Эта таблица содержит следующие поля: memid (диспетчерский идентификатор), invkind (invoke kind), Params (число параметров), ParamsOpt (число дополнительных (необязательных) параметров), description, helpfile, helpcontext, name.
Кроме того, она сохраняет массивоподобную таблицу объявленных параметров, описывающих каждый параметр функции, с такими полями: name, type. GetVarDesc(n) возвращает таблицу, отображающую n-ную переменную (или константу) в описании типа. Эта таблица содержит следующие поля: name, value (только для констант). GetDocumentation возвращает таблицу с документацией описания типа, с полями name, helpstring, helpcontext и helpfile. GetTypeAttr возвращает таблицу содержащую атрибуты типа для описания типа.
Эта таблица содержит следующие поля: GUID, typekind, Funcs (число функций), Vars (число переменных или констант) и ImplTypes.
Также имеется поле флагов - flags, содержащее таблицу с отображением флагов для данного описания типа.
Эта таблица содержит следующие логические поля: control, appobject, dispatchable, oleautomation, cancreate. GetImplType(n) Для описания типов COM классов, этот метод возвращает объект type information для n-ного интерфейса COM класса. GetImplTypeFlags(n) Для описания типов COM классов, этот метод возвращает таблицу, содержащую флаги реализации для n-ного интерфейса, принадлежащего к COM классу.
Эта таблица содержит следующие логические поля: default, source, restricted, defaultvtable. ExportEnumerations возвращает таблицу со всеми перечислениями в данной библиотеке типов (typelib). Ключами являются имена перечислений, каждый из них является таблицей, включенной по значениям перечислений.
LuaCOM был разработан Renato Cerqueira, Vinicius Almendra и Fabio Mascarenhas.
Проект финансируется компанией TeCGraf (Technology Group on Computer Graphics).