На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (10) « Первая ... 7 8 [9] 10  все  ( Перейти к последнему сообщению )  
> Поиск объекта , Вопрос тем, кто работал с MapX5.0
    У меня еще такой вопрос:
    В декабре выходит новый компилятор от Borland. В нем будет возможность создавать приложения и на Паскале и на С++ и на С#. Визуальные компоненты также сохраняются. Если MapX успешно используется в Делфи, то какова вероятность того, что в новом компиляторе он будет хорошо работать сразу и в Паскале и в С++. Ведь это будет уже единая среда. Может ли быть ситуация, что в проекте на Паскале все будет работать, а в этом же компиляторе на C++ все будет глючить?
    О новом компиляторе http://www.borland.com/us/products/cbuilder/index.html
      Лена, я уже устал объяснять, что функциональность ActiveX-компонентов не зависит от того, из какого языка вызывать его функции.
      Объясняю на пальцах. Есть стержень в шариковой авторучке. Если я пишу правой рукой и на бумаге, то все получается отлично, если пишу левой рукой - получается коряво. Если пишу правой рукой, но на стекле - ничего не получается. Вопрос: это глюк авторучки?
      Функции MapX(в том числ и поиск) уже реализованы программистами MapInfo в самом компоненте.
      Имеет ли для MS Word значение, будет он запущен из меню "Пуск", с рабочего стола или из проводника?

      P.S. Хотя зачем я это объясняю? Каждый волен упорно заблуждаться и ждать у моря погоды.
        Т.е. вы хотите сказать, что MapX также корректно работает и в Делфи и в Builder? Все проблемы в программисте, который пишет? Тогда почему техническая поддержка MapInfo четко написала мне, что компонент MapX не поддерживается MapInfo в Builder.
        MapX распространяет документацию и для VBA и для Делфи и для VC. Для Builder ничего нет. Очевидно, выявлены проблемы работы компонента в среде Builder из-за особенностей этого компилятора. Для MapInfo важно чтобы их ActiveX работал в любом компиляторе. Для Builder ничего нет от MapInfo. Это подозрительно. ;)
        Примеры на Делфи работают в Builder нет, разве это вина программиста т.е. меня :) ?
          Цитата Лена @
          Все проблемы в программисте, который пишет?
          Если этот программист сваливает причины ошибок на инструмент, а не пытается разобраться - да.
          Цитата Лена @
          Тогда почему техническая поддержка MapInfo четко написала мне, что компонент MapX не поддерживается MapInfo в Builder.
          Потому, что в технической поддержке сидят не программисты. Они знают только то, что им скажут, а остальное додумывают по мере своих способностей.

          Добавлено
          Цитата Лена @
          Для Builder ничего нет. Очевидно, выявлены проблемы работы компонента в среде Builder из-за особенностей этого компилятора
          Для Builder нет потому, что он близкий родственник Delphi. Или потому, что маркетинг не сказал, что это надо.
          Да, и о каких особенностях компилятора идет речь?
            Trainer> Если этот программист сваливает причины ошибок на инструмент, а не пытается разобраться - да.

            Первый мессинг этого топика имеет дату 30го августа. Топик набрал 9 страниц.
            Если это не попытка разобраться, тогда что таковым является?

            Потом, что ты написал звучит очень неубедительно. Было бы более убедительно, если б ты написал, что-то типа:

            "Если этот программист сваливает причины ошибок на инструмент, а не пытается разобраться - да.
            Вот я(Trainer) уже 5 лет разрабатываю программы с использованием MapX и Builder, и все нормально работает. Нет никаких проблем с поиском"

            Trainer> Потому, что в технической поддержке сидят не программисты. Они знают только то, что им скажут, а остальное додумывают по мере своих способностей.

            В тех поддержке сидят программисты (возможно не асы), которые отлично знают этот продукт. И вопрос, тестировался ли MapX на совместимость с СBuilder, не может являться фирменной тайной.
            MapX поставляется с примерами написанными на Visual C++, Delphi, Visual Basic. Значит, или не тестировался c CBuilder или проекты тест не прошли.

            Потом напр. Oracle, свои продукты, к примеру Pro*C++, тестирует только на совместимость с Visual C.

            Trainer> Для Builder нет потому, что он близкий родственник Delphi.

            Builder это С++, Delphi это Pascal. Может и мизерная, но всеж таки какая то
            разница имеется.

            Trainer> Да, и о каких особенностях компилятора идет речь?
            Например http://info.borland.com/devsupport/borlandcpp/patches.html

            imho ты неправ. Но, если у тебя есть на компе Delphi6/CBuilder6/MapX5,
            тогда могу написать в выходные маленькую программку на Delphi, для поиска в
            стандартной карте c использованием FindDataSet/FindField. И аналогичную программу на Builder-е. Программа на Delphi будет работать. А Builder-овская будет давать сбой.
            И отправить тебе оба проекта. Если вернешь мне работающую Builder-овскую, то respect, и ты прав и можешь устраиваться в mapInfo в отдел технической поддержки. :)
              Цитата Rosty @
              если у тебя есть на компе Delphi6/CBuilder6/MapX5,
              У меня нет MapX вообще, о чем я ранее уже писал.
              Я знаю, что такое ActiveX, я вижу исходники компонента для Builder'а. Если ты мне покажешь в этом исходнике место, где компонент определяет, что он вызывается из программы, написаной в Builder'е, а не, например, в Delphi, и поэтому отказывается работать, то я скажу, что я не прав.

              Добавлено
              Цитата Rosty @
              Например http://info.borland.com/devsupport/borlandcpp/patches.html
              И что из этого влияет на работу MapX? А то ведь я могу привести ссылку на, например, Microsoft Platform SDK или Visual Studio. Будет ли это означать, что MapX не может работать с Visual Studio и вообще под Windows?

              Добавлено
              Цитата Rosty @
              И аналогичную программу на Builder-е. Программа на Delphi будет работать. А Builder-овская будет давать сбой.
              Выкладывай, посмотрю. Но без MapX оттрассировать не смогу. DFM-ы должны быть в текстовом формате.
              Цитата Rosty @
              В тех поддержке сидят программисты (возможно не асы), которые отлично знают этот продукт.
              Хотелось бы в это верить. :D Практика обычно прозаичнее, имел возможность в этом убедиться, правда, не в программировании. Точнее - в программировании не под PC. Например, с Philips.
              Цитата Rosty @
              Значит, или не тестировался c CBuilder или проекты тест не прошли.
              Или это в MapInfo просто никому не надо.
                Ребята, только не сортесь, я Вас очень прошу!

                trainerу отдельное спасибо, что указал мне во время дискуссии правильную загрузку датасетов.
                  Это не ссора. Это выявление истины.
                    С сылкой я имел ввиду, что каждый компилятор (+текущие его системные файлы) имеют свои баги.
                    По всей видимости поддержка ActiveX реализована более удачно в Delphi, чем в Buildere.

                    Напр. http://info.borland.com/devsupport/bcppbuilder/patches/bcpp5/BCB5FIXES.HTML
                    в 5м buildere исправляются такие баги связанные с ActiveX.

                    When importing a type library which contains a user-defined record, the _TLB.h file contains a declaration of the GUID for the user-defined record, but the _TLB.cpp file contains no definition thereof.

                    The override flag for CAN_CREATE (-Yu) doesn't work.

                    GUIDs in a type library which are associated with records are not output in the generated .cpp file but ARE output in the generated .h file

                    The supplied BUILD_.h is incorrect.

                    utilcls.h uses __uuidof(DISPINTF), where DISPINTF is a template parameter defaulted to IDispatch. This *fails* at runtime where __uuidof(IID_IDispatch) succeeds

                    Including MSVBVM60.DLL containing TLB fails on generating the pascal for a COM interface, with Error: 'GhostMethod_76' already exists.

                    TAutoDriver copy constructor (LCID) does not clear out m_ExcepInfo, but TAutoDriver copy constructor (TAutoDriver) does.

                    TVariant& operator= (Const TBaseVariantT& rhs) does not compile.

                    When importing a type library which contains a user-defined record, the _TLB.h file contains a declaration of the GUID for the user-defined record, but the _TLB.cpp file contains no definition thereof.

                    Can not use an activeX control created by Visual Basic
                    V6.0 that does not have 'CAN CREATE' flag set in its
                    type info.

                    VB6 controls will not allow methods to be called via
                    the OCX wrapper. The Dispatch wrapper works but cannot
                    be made visible.

                    Сам пример. Используется Mapinfo-ская карта Wordlcap.map.
                    Delphi проект находит по втрому полю(Country) "FALKLAND ISLANDS" и
                    позиционирует карту на Stanley.
                    Builder-овская программа при команде
                    CMapXFindFeature *FoundObj = lyr->Find->Search(WideString("FALKLAND ISLANDS"), v);
                    дает сбой IsBound() возвращает false на 4270 строке utlcls.h.
                    ExpandedWrap disabled
                      //********************* Delphi  *******************************//
                      procedure TFindForm.Button1Click(Sender: TObject);
                      var
                         FoundObj, ds: variant;
                         lyr : CMapXLayer;
                         unusedParam: OleVariant;
                      begin
                         TVarData(unusedParam).vType := varError;
                         TVarData(unusedParam).vError := 2147614724; // DISP_E_PARAMNOTFOUND;
                       
                         lyr := currentMap.Layers.Item[1];
                         ds := currentMap.Datasets.Add(miDataSetLayer, lyr, lyr.Name,
                                    unusedParam, unusedParam, unusedParam, unusedParam, unusedParam);
                       
                         lyr.Find.FindDataset := ds;
                         lyr.Find.FindField := ds.Fields.Item[2];
                         FoundObj := lyr.Find.Search('FALKLAND ISLANDS', '');
                       
                         if (foundObj.findrc Mod 10 = 1) then
                           currentMap.ZoomTo(2, FoundObj.CenterX, FoundObj.CenterY)
                         else
                           showmessage('Exact Match Not found');
                      end;
                       
                      // **************** BUILDER  ******************************************
                      void __fastcall TForm1::Button5Click(TObject *Sender)
                      {
                        Variant v;
                        v.VType = varError;
                        v.VError = 2147614724;
                       
                        CMapXLayer *lyr = Form1->Map1->Layers->_Item(OleVariant(1));
                        CMapXDataset *ds = Form1->Map1->DataSets->Add(miDataSetLayer,OleVariant(lyr),
                                           OleVariant(lyr->Name),v,v,v,v,v);
                       
                        lyr->Find->FindDataset = ds;
                        lyr->Find->FindField = ds->Fields->_Item(OleVariant(2));
                        v.VType = varString;
                        v.VString = "";
                        CMapXFindFeature *FoundObj = lyr->Find->Search(WideString("FALKLAND ISLANDS"), v);
                        
                        if(FoundObj->FindRC % 10 == 1)
                        {
                          Form1->Map1->Zoom = 2;
                          Form1->Map1->CenterX = FoundObj->get_CenterX();
                          Form1->Map1->CenterY = FoundObj->get_CenterY();
                        }
                        else
                        {
                          ShowMessage("Exact Match Not found");
                        }
                      }
                       
                      DFM файл:
                       
                      object Form1: TForm1
                        Left = 192
                        Top = 107
                        Width = 761
                        Height = 548
                        Caption = 'Form1'
                        Color = clBtnFace
                        Font.Charset = DEFAULT_CHARSET
                        Font.Color = clWindowText
                        Font.Height = -11
                        Font.Name = 'MS Sans Serif'
                        Font.Style = []
                        OldCreateOrder = False
                        PixelsPerInch = 96
                        TextHeight = 13
                        object Map1: TMap
                          Left = 0
                          Top = 4
                          Width = 601
                          Height = 513
                          ParentColor = False
                          TabOrder = 0
                          ControlData = {
                            2CA107001D3E000005350000010000000F000080FFFEFF3B45006D0070007400
                            ... удалил строки. Это объект MapX
                            3F0D64FC8998EA593F00000000000000000100000000000000}
                        end
                        object Button5: TButton
                          Left = 605
                          Top = 2
                          Width = 137
                          Height = 23
                          Caption = 'Find Falkland'
                          TabOrder = 1
                          OnClick = Button5Click
                        end
                      end
                      Цитата Rosty @
                      дает сбой IsBound() возвращает false на 4270 строке utlcls.h.
                      В имеющихся у меня Borland C++Builder5 UP1 и Borland C++Builder6 UP4 в строке 4270 нет вызовов функции IsBound. В BCB6 эта строка вообще не содержит кода, в BCB5 содержит часть объявления одной из функций.

                      Добавлено
                      Цитата Rosty @
                      Напр. http://info.borland.com/devsupport/bcppbui.../BCB5FIXES.HTML
                      Зачем давать ссылку на исправленные ошибки? Я по-прежнему жду информацию о том, что принципиально препятствует работоспособности ActiveX в BCB. Для любой версии Builder'а
                        >сбой IsBound()

                        Да, именно эта ошибка измучила меня до полного душевного истощения. :)

                        Если бы наш форум не читал еще одни человек, который мне подсказал о поиске, то я так бы и не решила этот вопрос.
                        В тех.суппорт сидит некая Синди и выдает примеры только на VBA. На Builder получить ничего не возможно. Правда, судя по их форуму, периодически возникают вопросы о том, как работает MapX в Builder 6, но ответ Синди всегда одни – MapInfo не тестировала MapX в среде Builder, поэтому поддержки нет. Тем не мене эта Синди согласилась принять мой слой дорог для поиска улицы. В итоге я получила важную информацию о том, что поле должно быть integer, а не float. Однако приложение по-прежнему не работало. Потом я получила еще одну подсказку от читателя форума, он нашел в help:
                        “Для Find.FindDataSet

                        Dataset of field to match against. If not specified, a layer's KeyField is
                        used.

                        А для Layer.KeyField-a

                        This string property identifies the column (field) name in the layer's
                        MapInfo
                        table that will be set or retrieved by the KeyValue property of a feature
                        object.
                        It currently defaults TO THE FIRST COLUMN in the layer's table.
                        This property does not apply to raster or userdraw layers.
                        An error is raised if you try to set the KeyField to an invalid field
                        name.”

                        После переноса поля на первое место поиск заработал, но через FindDataSet/FindField не работает.

                        Rosty ели у вас есть хоть какие-то фрагменты кода на C++ Builder для MapX вышлите мне please!
                        Л.
                          ..\Borland\CBuilder6\include\vcl\utilcls.h
                          4267: template <class DISPINTF> HRESULT
                          4268: TAutoDriver<DISPINTF>::Invoke(DispatchFlag ...............
                          4269: {
                          4270: _ASSERTE(IsBound() /* Must be bound to perform Invoke() */);

                          На счет ссылки.

                          Ты спрашывал какие могут быть особенности у компилятора.
                          Например такие, что программа откомпилированная на CBuilder5 может работать и может не рвботать в зависимости от того, установлен ли последний SP.
                          Это раз. Во вторых, ты бы сколько ставил на то, что тот SP исправляет все баги BCB5?

                          А на счет приведенного кода по существу ничего сказать не можешь?
                            Lena >Rosty если у вас есть хоть какие-то фрагменты кода на C++ Builder для MapX вышлите мне please!

                            Еще раз??? :)
                              Rosty судя по вашей компетентности в вопросе о MapX, я предположила, что у вас могут быть фрагменты любого работающего кода. Вот и попросила. :)

                              В старом приложении, найденная улица не только увеличивалась зумом на карте, но и становилась жирной и красилась в красный цвет. Займусь этим в понедельник. О результатах сообщу участникам этой дискуссии. :)
                                Цитата Guest @
                                Ты спрашывал какие могут быть особенности у компилятора.
                                Я не спрашивал, какие могут быть особенности у компиляторов. У меня достаточно большой опыт работы с разнообразными компиляторами. Я спрашивал, какие особенности компилятора Borland C++ 5.5.x или 5.6.x препятствуют правильной работе MapX.
                                Цитата
                                Цитата
                                Очевидно, выявлены проблемы работы компонента в среде Builder из-за особенностей этого компилятора
                                о каких особенностях компилятора идет речь?

                                Касаемо строки 4270. У меня Borland C++ 6 Update Pack 4. Строка под номером 4270 содержит только пустой комментарий. Update Pack 4 помимо много еще чего как раз заменяет и utilcls.h
                                Теперь относительно самой функции IsBound. Она проверяет, связан ли компонент с сервером.
                                Цитата Guest @
                                Во вторых, ты бы сколько ставил на то, что тот SP исправляет все баги BCB5?
                                Я ни на что ставить не намерен. Есть доказательства - это одно, нет доказательств - другое. Вот пример недавно обнаруженного "глюка компилятора": Странный глюк . Я такого видел уже достаточно много и крайне скептически отношусь к очередным "открывателям".
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0745 ]   [ 15 queries used ]   [ Generated: 30.05.24, 08:25 GMT ]