Конфигурация модуля в modcom.ini
При использовании статической модели взаимодействия с COM важная информация задается в конфигурационном файле, считываемом при инициализации модуля MODCOM.
В конфигурационном файле modcom.ini задаются список и параметры проекции COM-интерфейсов и классов на типы внутреннего языка. Под проекцией понимается объявление типа в модуле MODCOM на основании COM-интерфейса с автоматическим преобразованием типов параметров и настраиваемым формированием различных идентификаторов. Конфигурационный файл находится в директории платформы. Его редактирование можно производить в любом текстовом редакторе, например, в Notepad.
Секция "Сommon".
В секции "Common" задаются параметры общие для всех объявляемых типов.
Параметр | Значение по умолчанию | Комментарий |
---|---|---|
ErrorLog | 1 | Ведение файла протокола ошибок объявления типов. |
LogFileName | modcom.log | Имя файла протокола ошибок объявления типов. |
Рекомендуется использовать запись ошибок объявлений в файл протокола для выявления проблемных типов и отдельных методов, особенно на этапе подключения новых COM-классов. Файл протокола с заданным именем записывается в директорию платформы.
Пример:
[Common] ErrorLog=1 LogFileName=modcom.log
Секция объявления типа.
Все остальные секции, кроме секции "Common", отвечают за объявление типа. Имя такой секции рассматривается как внутреннее имя типа.
Параметр | Значение по умолчанию | Комментарий |
---|---|---|
Declare | 1 | Признак объявления данного типа. Задав 0 можно временно исключить данный тип из объявлений, не удаляя остальные его настройки в modcom.ini. |
TypeLibPath | Полный путь к файлу библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibGUID. | |
TypeLibGUID | GUID зарегистрированной библиотеки типов, объявляющей необходимый интерфейс COM. Может не задаваться, если задан параметр TypeLibPath. | |
LibVerMajor | 1 | Старшая версия запрашиваемой библиотеки типов. |
LibVerMinor | 0 | Младшая версия запрашиваемой библиотеки типов. |
IID | GUID необходимого COM-интерфейса (IID). Задается обязательно. | |
ClassID | GUID необходимого COM-класса (CLSID). Может не задаваться, если задан параметр ProgID. | |
ProgID | ProgId необходимого COM-класса. Может не задаваться, если задан параметр ClassID. | |
TypeName | Идентификатор объявляемого типа во внутреннем языке на разных языках. Например, eng{MyType},rus{МойТип}. По умолчанию для всех языков в качестве идентификатора используется внутреннее имя типа, соответствующее имени секции. | |
BrowseInterface | 0 | Признак отладочного вывода описаний функций обрабатываемого COM-интерфейса в текстовый файл. При подключении нового COM-класса рекомендуется поставить значение 1 и задать имя файла в параметре BrowseFileName. |
BrowseFileName | typeinfo.txt | Имя текстового файла для отладочного вывода описаний функций обрабатываемого COM-интерфейса. При подключении нового COM-интерфейса рекомендуется поставить значение параметра BrowseInterface равным 1 и задать имя файла для диагностики проблем вывода. По завершении отладки вывод можно отключить. |
UnsupportedFunc | Skip | Обработка неподдерживаемых функций. Возможные варианты: Skip – пропустить, Break – прервать. |
DocStringAsLangName | Режим интерпретации строки документации (helpstring), задаваемой к каждому методу и свойству интерфейса как идентификатора на заданном языке. Возможные варианты: eng – как идентификатор для английского языка, rus – как идентификатор для русского языка. | |
EmptyDocString | English | Режим, что делать, если строка документации (helpstring) пустая. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать английское имя (заданное в IDL). Используется только при заданном параметре DocStringAsLangName. |
UnsupportedName | English | Режим обработки некорректного идентификатора. Возможные варианты: Skip – пропустить, Break – прервать, English – использовать соответствующее английское имя (если оно в свою очередь корректно), Correct – попытаться исправить (управляется несколькими параметрами, см. ниже). |
CorrectSpaces | Erase | Режим коррекции неправильного идентификатора. Позволяет исключить пробелы, что может потребоваться в строке документации. Возможные варианты: Erase – удалить пробелы, Replace – заменить пробелы символом, заданным параметром ReplaceSpaceChar, Break – прервать. |
ReplaceSpaceChar | _ | Символ для замены пробелов в идентификаторе. Используется при CorrectSpaces=Replace. |
CorrectFirstDigit | Prefix | Режим коррекции неправильного идентификатора. Позволяет избавиться от начальной цифры в имени. Возможные варианты: Prefix – добавить буквенный префикс, заданный параметром FirstDigitPrefix, Break – прервать. |
FirstDigitPrefix | _ | Префикс для имен, начинающихся с цифры. Используется при CorrectFirstDigit = Prefix. |
PropertyGetPrefix | eng{get_},rus{счит_} | Префикс для методов получения значений свойств. Можно задать eng{},rus{} для именования метода get-функции свойства без префикса. |
PropertyPutPrefix | eng{put_},rus{зап_} | Префикс для методов установки значений свойств. Префикс нужен, чтобы имена методов получения и установки значений свойств различались. |
PropertyPutArgName | eng{value},rus{значение} | Имя формального параметра (единственного) метода, соответствующего put-функции свойства. |
AutoArgNamePrefix | eng{arg},rus{арг} | Префикс имен формальных параметров методов для случая, когда в COM-интерфейсе таковые не заданы. Параметры нумеруются с 1 так, что для префикса "арг" имена будут: арг1, арг2, арг3 и т.д. |
DateAsTime | Явное указание интерпретации типа VT_DATE как ВРЕМЯ (cм. Соответствие типов COM типам внутреннего языка). Для указания используются английские имена методов и свойств. Отдельные указания разделяются запятыми. Указание состоит из имени свойства или метода и фигурных скобок. Пример для свойства: MyProp{prop}. Здесь "prop" говорит о том, что тип свойства надо рассматривать как время. Для методов в фигурных скобках указываются необходимые позиции параметров и/или результат. Пример для метода: MyMethod{res;arg(2);arg(4)}. Здесь отдельные указания для метода разделены точкой с запятой, "res" – указывает на тип возвращаемого значения, а "arg" – на тип параметра с соответствующим номером (от 1). Т.е. в примере MyMethod возвращает время, а также его второй и четвертый параметры имеют тип время. |
Пример:
; описание параметров объявления типа со внутренним именем Example [Example] ; задаем GUID библиотеки типов TypeLibGUID={42716B99-8992-11DA-9542-000476D1BF92} ; и GUID интерфейса IID={42716BA5-8992-11DA-9542-000476D1BF92} ; для определения класса задаем ProgId ProgID=IbCOMExt.Example ; ставим признак, что этот тип объявлять Declare=1 ; задаем имена типа для английского и русского языков, ; под которыми он будет доступен во внутреннем языке TypeName=eng{Example_COM},rus{Пример_COM} ; ставим признак отладочного вывода функций интерфейса COM BrowseInterface=1 ; и задаем имя соответствующего текстового файла BrowseFileName=ExampleCOM.txt ; ставим признак генерации ошибки при обнаружении неподдерживаемой функции UnsupportedFunc=Break ; ставим признак интерпретации строки документации (helpstring) в качестве ; идентификатора для русского языка DocStringAsLangName=rus ; ставим пустой префикс для get-функций свойств PropertyGetPrefix=eng{},rus{} ; ставим префиксы для put-функций свойств PropertyPutPrefix=eng{put_},rus{зап_} ; ставим имя формального параметра put-функций свойств PropertyArgName=eng{value},rus{значение} ; ставим префиксы для автоматического именования формальных параметров AutoArgNamePrefix=eng{arg},rus{арг} ; явно указываем места, где VT_DATE надо интерпретировать как тип ВРЕМЯ: ; - тип второго параметра метода DateTime ; - тип возвращаемого значения метода GetTime ; - тип свойства StartTime DateAsTime=DateTime{arg(2)},GetTime(res),StartTime{prop}
Замечание: чтение файла конфигурации и объявление типов происходят при инициализации модуля. Поэтому для вступления в силу отредактированного файла modcom.ini необходимо перезапустить платформу.