Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

**Как исправить ошибку "Класс не зарегистрирован" при доступе к Global Interface Table в Delphi 7**

Delphi , Технологии , COM и DCOM

Как исправить ошибку "Класс не зарегистрирован" при доступе к Global Interface Table в Delphi 7

При работе с компонентами COM в Delphi 7 иногда возникают ошибки, связанные с неправильной регистрацией классов. Одной из таких ошибок является "Класс не зарегистрирован" при попытке доступа к Global Interface Table (GIT). В этой статье мы рассмотрим, как исправить данную ошибку, используя примеры кода на Object Pascal.

Описание проблемы

Разработчики, работающие с COM-объектами в Delphi 7, могут столкнуться с проблемой, когда при вызове функции CoCreateInstance для создания экземпляра IGlobalInterfaceTable возникает исключение "Класс не зарегистрирован". Это происходит из-за того, что в реестре отсутствует запись для указанного GUID.

Пример кода с ошибкой

Вот пример кода, который приводит к ошибке:

uses Comobj, ActiveX;

var
   cGIT : IGlobalInterfaceTable = NIL;
const
   CLSID_StdGlobalInterfaceTable: TGUID = '{00000146-0000-0000-C000-000000000046}';

function GIT : IGlobalInterfaceTable;
begin
   if (cGIT = NIL) then
      OleCheck (CoCreateInstance (CLSID_StdGlobalInterfaceTable, NIL,
                                  CLSCTX_ALL, IGlobalInterfaceTable, cGIT ));
   Result := cGIT;
end;

Ошибка в определении CLSID

Проблема заключается в неправильном определении CLSID_StdGlobalInterfaceTable. В коде используется GUID интерфейса, а не класса, который его реализует. Правильный GUID класса, реализующего IGlobalInterfaceTable, — это {00000323-0000-0000-C000-000000000046}.

Исправленный код

Вот исправленный код, который корректно инициализирует IGlobalInterfaceTable:

unit GlobalInterfaceTable;
interface
uses Types, ActiveX;

type
  IGlobalInterfaceTable = interface(IUnknown)
    ['{00000146-0000-0000-C000-000000000046}']
    // Описание методов интерфейса
  end;

const
  CLSID_StdGlobalInterfaceTable : TGUID = '{00000323-0000-0000-C000-000000000046}';

function GIT: IGlobalInterfaceTable;
begin
  OleCheck(CoCreateInstance(CLSID_StdGlobalInterfaceTable, NIL, CLSCTX_ALL, IGlobalInterfaceTable, Result));
end;

Использование утилиты OleView32

Для проверки GUID класса рекомендуется использовать утилиту OleView32, которая доступна в Windows SDK и позволяет удобно просматривать реестр интерфейсов.

Подтвержденный ответ

Использование правильного GUID класса позволяет избежать ошибки "Класс не зарегистрирован". Приведенный выше исправленный код должен работать корректно в Delphi 7.

Заключение

При работе с COM-объектами важно обращать внимание на правильное определение классов и интерфейсов, а также использовать специализированные утилиты для их проверки. В данном случае, исправление кода и использование OleView32 позволили устранить проблему с доступом к Global Interface Table в Delphi 7.

Создано по материалам из источника по ссылке.

Описание: В Delphi 7 при работе с COM-объектами возникла ошибка "Класс не зарегистрирован" из-за неправильного использования GUID в коде, пытающемся создать экземпляр `IGlobalInterfaceTable`, и исправление заключается в замене GUID интерфейса на GUID кла


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: COM и DCOM ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 00:59:14/0.0031931400299072/0