На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> OLE Automation, в Visual C не срабатывает , Вроде все правильно, а CreateDispatch() не срабатывает
    Есть некая ДЛЛ, в которой ОЛЕ сервер некой проги StoreHouse4 - Sh4Ole.dll. Она прописана в реестре, и из 1С нормально вызывается и работает:

    ExpandedWrap disabled
      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.Код на кнопке
    ExpandedWrap disabled
      ISH4Ole sh4;
      if (!sh4.CreateDispatch("Sh4Ole.SH4App"))
          {
         AfxMessageBox("Sh4Ole не найден.");
         return;
              }


    Было подозрение, может вызывать не "Sh4Ole.SH4App", а как-то по другому, но в реестре в CLSID только такой вызов нашел.

    Вобщем "Sh4Ole не найден." и на выход. Подскажите где я ошибся.
      Попробуй подключиться к серверу, используя директиву #import Посмотри здесь
        CoInitialize() - CoUninitialize()
          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() никак не помогла.
            shadowbolt
            Цитата
            но в импортируемых функциях была ошибка

            Посмотри что за ошибки, может конфликтуют имена. Поиграйся с директивой #import.
              Заработало через #import (пару функций пришлось переименовать):

              ExpandedWrap disabled
                Sh4Ole::ISH4OlePtr obj;
                obj.CreateInstance(L"Sh4Ole.SH4App");  
                obj->DBLogin(); //тут вылазит окошко


              Но мне категорически не понятно, почему в первом варианте CreateDispatch не срабатывает???
              ExpandedWrap disabled
                ISH4Ole sh4;
                if (!sh4.CreateDispatch("Sh4Ole.SH4App"))
                    {
                   AfxMessageBox("Sh4Ole не найден.");
                   return;
                        }
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0.0626 ]   [ 16 queries used ]   [ Generated: 8.09.26, 14:52 GMT ]