OLE Automation, в Visual C не срабатывает
, Вроде все правильно, а CreateDispatch() не срабатывает
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.232] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online
OLE Automation, в Visual C не срабатывает
, Вроде все правильно, а CreateDispatch() не срабатывает
|
Сообщ.
#1
,
|
|
|
|
Есть некая ДЛЛ, в которой ОЛЕ сервер некой проги StoreHouse4 - Sh4Ole.dll. Она прописана в реестре, и из 1С нормально вызывается и работает:
![]() ![]() sh=СоздатьОбъект("Sh4Ole.Sh4App"); //CreateOleObject('Sh4Ole.Sh4App') - для бейсика sh.DBLogin(); sh.DBLogout(); Делаю аналог на Visual C: 1. Создаю дефолтный MFC dialog-based проект, на диалоге кнопка с обработкой нажатия. 2. В самое начало InitInstance() добавляю AfxOleInit() с проверкой. 3. ClassWizard->Automation->Add Class->From a type library->Sh4Ole.dll. Создает класс ISH4Ole, инклудю его в свой CPP. 4.Код на кнопке ![]() ![]() ISH4Ole sh4; if (!sh4.CreateDispatch("Sh4Ole.SH4App")) { AfxMessageBox("Sh4Ole не найден."); return; } Было подозрение, может вызывать не "Sh4Ole.SH4App", а как-то по другому, но в реестре в CLSID только такой вызов нашел. Вобщем "Sh4Ole не найден." и на выход. Подскажите где я ошибся. |
|
Сообщ.
#2
,
|
|
|
|
Попробуй подключиться к серверу, используя директиву #import Посмотри здесь
|
|
Сообщ.
#3
,
|
|
|
|
CoInitialize() - CoUninitialize()
|
|
Сообщ.
#4
,
|
|
|
|
To v_klad: сначала я так и начал делать, но в импортируемых функциях была ошибка, когда я закоментировал ошибочные функции в tli и tlh, то студия сообщает что: "The file has been modified outside of the source editor. Do you want to reload it?". Если перезагружаю - то ошибка возвращается, если нет - то ругается на те же ошибки, как будто они не закоментированны.
To Бублик: Замена AfxOleInit() на CoInitialize() - CoUninitialize() никак не помогла. |
|
Сообщ.
#5
,
|
|
|
|
shadowbolt
Цитата но в импортируемых функциях была ошибка Посмотри что за ошибки, может конфликтуют имена. Поиграйся с директивой #import. |
|
Сообщ.
#6
,
|
|
|
|
Заработало через #import (пару функций пришлось переименовать):
![]() ![]() Sh4Ole::ISH4OlePtr obj; obj.CreateInstance(L"Sh4Ole.SH4App"); obj->DBLogin(); //тут вылазит окошко Но мне категорически не понятно, почему в первом варианте CreateDispatch не срабатывает??? ![]() ![]() ISH4Ole sh4; if (!sh4.CreateDispatch("Sh4Ole.SH4App")) { AfxMessageBox("Sh4Ole не найден."); return; } |