При работе с библиотекой JVCL в среде разработки Delphi XE2 пользователи могут столкнуться с ошибкой, связанной с отсутствием файла ComObj.dcu. В данной статье мы рассмотрим, как решить эту проблему, и что необходимо для корректной работы функции DispatchInvoke.
Описание проблемы
Пользователи, пытающиеся установить JVCL из исходного кода, могут столкнуться с ошибкой в строке 1267 модуля JvInterpreter. Ошибка связана с использованием модуля ComObj, который не может быть найден в Delphi XE2. После удаления ComObj из списка uses и ожидания появления новых ошибок ниже по коду, пользователи сталкиваются с проблемой, связанной с EOLEError, которая является частью OleAuto. Добавление OleAuto не решает проблему, и ошибка возникает на строке 1799 в функции DispatchInvoke. Вопрос заключается в том, что произошло с ComObj и какой модуль необходим для использования DispatchInvoke в Delphi XE2.
Решение проблемы
Решение заключается в изменении списка uses для использования полностью квалифицированного имени модуля:
Эти изменения позволяют компилятору корректно собрать проект без ошибок. Для получения списка компиляторных определений можно обратиться к этой ссылке.
Альтернативное решение
В качестве альтернативы можно добавить в проект System.Win в список доступных имен модулей. Это позволит использовать исходный код без изменений.
Примеры кода
Вот пример использования DispatchInvoke после внесения необходимых изменений в список uses:
uses
TypInfo,
{$IFDEF JvInterpreter_OLEAUTO}
OleConst, ActiveX,
System.Win.ComObj; // Используем полностью квалифицированное имя
type
TCallDesc = record
// Описание структуры CallDesc
end;
var
Dispatch: IDispatch;
DispIDs: array[0] of TDispID;
ParamTypes: array[0] of Word;
Result: Variant;
begin
// Инициализация параметров
Result := DispatchInvoke(
IDispatch(Dispatch),
TCallDesc,
PDispIDList(@DispIDs[0]),
ParamTypes,
Result
);
end;
Вывод
Для исправления ошибки с ComObj в JVCL при установке в Delphi XE2, необходимо либо изменить список uses на полностью квалифицированное имя модуля, либо добавить System.Win в список имен модулей проекта. Это позволит корректно работать с функцией DispatchInvoke и избежать связанных с ней проблем.
У пользователей Delphi XE2 возникает ошибка при установке JVCL из-за отсутствия файла `ComObj.dcu`, что мешает корректной работе функции `DispatchInvoke`, и требуется исправление списка `uses` для решения проблемы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.