Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2009, 21:25   #1
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию Проблемы с инициализацией com компонента

Захотелось мне использовать com компонент, и написал я:


Код:
 SetLastError(0);
       hr := CoInitialize(nil);  //инициализация com
       if (hr <> S_OK) then  //если инициализация не успешна
       OleError(hr) // показываем проблему c ole
       else
       begin
       RusLemmatMain.LoadDictionariesRegistry();   //метод компонента
и далее идет остальной код.

Есественно hr оказалась совсем не s_ok, а оказалась 1. Это насколько я знаю означает что инициализация уже выполнена.

Ну ладно. Однако, если я не использую функцию CoInitialize(nil) (если компонент уже инициализирован она не нужна, думаю) то при использовании метода из этого компонента (RusLemmatMain.LoadDictionariesRegi stry) появляется исключение про EAccess violation с проблемами чтения из памяти по такому то адресу что какбе намекает...

Если же я проверяю что возвращает CoInitialize с помощью OleError(hr) то OleError орет про исключение project <project_name> raised exeption class OleSysError with message "Неверная функция".

Ежели мы посмотрим на ситуацию через RaiseLastWin32Error, то появляется сообщение что project <project_name> raised exeption class OleSysError with message "A call to an OS function failed".

Как же заставить компонент работать?

Последний раз редактировалось Stilet; 12.08.2009 в 08:38.
Anekdot вне форума Ответить с цитированием
Старый 12.08.2009, 08:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Подожди а код этот ты в СОМ выполняешь или где?
Зачем тебе вызывать CoInitialize?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2009, 08:55   #3
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

Нет это код программы. Я не оч разбираюсь в com компонентах и все делал как показал другой человек, он показал что надо написать coinitialize
Anekdot вне форума Ответить с цитированием
Старый 12.08.2009, 09:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

СОМ зарегистрирован в реестре?
Я обычно для работы с ними использую CreateComObject function для загрузки и получения на него указателя.
И GetActiveOleObject function для получения указателя на уже загруженный СОМ сервер.
И далее работаю как с обычным классом. <указатель>.<Метод>
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2009, 14:58   #5
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

Зарегистрирован конечно. Попробую изучить две эти функции.

Объект вроде не поддерживает IDispatch, поэтому CreateOleObject не подходит. Для использования CreateComObject нужно знать CLSID. Я его не знаю. Как его узнать? Я знаю название кокласса.

Все разрешилось. При подключении модуля comobj и модуля компонента при инициализации программы автоматически инициализируется com компонент, поэтому HRESULT и говорил что инициализация уже была выполнена. CoInicialize и иже с ними прописывать не нужно, просто создать объекты с нужным интерфейсом и пользоваться.

Последний раз редактировалось Stilet; 21.08.2009 в 10:35.
Anekdot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание компонента Bayazet Общие вопросы Delphi 4 17.12.2008 16:48
проблемы с инициализацией графики Teksa Паскаль, Turbo Pascal, PascalABC.NET 4 06.10.2008 18:03
Имя компонента... prizrak1390 Общие вопросы Delphi 11 17.04.2008 14:47
Установка компонента xakkkkker Компоненты Delphi 3 01.04.2008 08:50