|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.08.2009, 21:25 | #1 |
Пользователь
Регистрация: 27.03.2009
Сообщений: 27
|
Проблемы с инициализацией com компонента
Захотелось мне использовать com компонент, и написал я:
Код:
Есественно 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. |
12.08.2009, 08:39 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Подожди а код этот ты в СОМ выполняешь или где?
Зачем тебе вызывать CoInitialize?
I'm learning to live...
|
12.08.2009, 08:55 | #3 |
Пользователь
Регистрация: 27.03.2009
Сообщений: 27
|
Нет это код программы. Я не оч разбираюсь в com компонентах и все делал как показал другой человек, он показал что надо написать coinitialize
|
12.08.2009, 09:03 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
СОМ зарегистрирован в реестре?
Я обычно для работы с ними использую CreateComObject function для загрузки и получения на него указателя. И GetActiveOleObject function для получения указателя на уже загруженный СОМ сервер. И далее работаю как с обычным классом. <указатель>.<Метод>
I'm learning to live...
|
12.08.2009, 14:58 | #5 |
Пользователь
Регистрация: 27.03.2009
Сообщений: 27
|
Зарегистрирован конечно. Попробую изучить две эти функции.
Объект вроде не поддерживает IDispatch, поэтому CreateOleObject не подходит. Для использования CreateComObject нужно знать CLSID. Я его не знаю. Как его узнать? Я знаю название кокласса. Все разрешилось. При подключении модуля comobj и модуля компонента при инициализации программы автоматически инициализируется com компонент, поэтому HRESULT и говорил что инициализация уже была выполнена. CoInicialize и иже с ними прописывать не нужно, просто создать объекты с нужным интерфейсом и пользоваться. Последний раз редактировалось Stilet; 21.08.2009 в 10:35. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создание компонента | 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 |