На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (19) 1 2 [3] 4 5 ...  18 19 все  ( Перейти к последнему сообщению )  
> Функция из DLL , Вывод данных
    858993460 вот это число которое вывелось с pValueOp, я так понимаю адрес ??? или нет
      Цитата kms @
      858993460 вот это число которое вывелось с pValueOp, я так понимаю адрес ??? или нет

      Это какой-то мусор
        Цитата Олег М @
        А как у тебя получилось одинаковое количество колонок и строк, ты там точно ничего не перепутал?

        я поставил в запросе другую таблицу на 10 колонок и 10 строк

        Добавлено
        Цитата Олег М @
        Это какой-то мусор

        ага понял щас пробую как ты написал
          Цитата kms @
          я поставил в запросе другую таблицу на 10 колонок и 10 строк

          Поставь лучше разные, чтоб не перепутать. А то ты можешь.
            ExpandedWrap disabled
              hcSqlDstInfoT cols[pCol] = { 0 };
              hcSqlGetStmtAttr(pdb, HSCLI_STMT_DST_INFO, 0, cols /*spCols.get()*/, pCol * sizeof(hcSqlDstInfoT), &cntOp);

            ExpandedWrap disabled
              hcSqlDstInfoT cols[pCol] = { 0 };

            ругается "Выражение должно иметь константное значение" показывает на pCol

            Добавлено
            Цитата Олег М @
            Поставь лучше разные, чтоб не перепутать. А то ты можешь.

            ага понял щас
              Цитата kms @
              угается "Выражение должно иметь константное значение" показывает на pCol

              Какой у тебя компилятор? И как объявлена pCol?
                Эти префиксы - p, n, sp и т.д. не просто так ставятся, от фонаря. Это т.н. венгерская нотация, почитай. В твоём случае переменную лучше назвать nCols
                  MSVC 2015 Express
                  ExpandedWrap disabled
                    hcHSTMT  pOper;// Адрес памяти, куда будет записан идентификатор   оператора.
                    hcSqlAllocStmt(pdb, &pOper);    // Создать оператор
                    hcSqlExecDirect(pOper, "fix all; select * from AVER;");//Выполнение SQL в указанном операторе  
                    int pCol = 0; //  Место для количества колонок
                    hcRECNO  pStr = 0; //  Место для количества строк  
                    hcSqlNumResultCols(pOper, &pCol); // Получить количество колонок результата
                    hcSqlRowCount(pOper, &pStr);      // Получить количество строк результата
                        cout << "Кол-во колонок  " << pCol << endl;
                        cout << "Кол-во строк    " << pStr << endl;
                        
                         unsigned optionOp = 107;// Режим
                         int         posOp = 1 ; // Позиция
                         void  *pValueOp;        // Буфер для значения
                         unsigned sizeOp = 1024; // и его размер
                         unsigned  cntOp  ;     // сколько байтов записали в буфер
                          
                     hcSqlDstInfoT cols[] = { 0 };
                     hcSqlGetStmtAttr(pdb, HSCLI_STMT_DST_INFO, 0, cols /*spCols.get()*/, pCol * sizeof(hcSqlDstInfoT), &cntOp);


                  да вот сделал так cols[]
                  нашел щас в старом справочнике
                  ExpandedWrap disabled
                    Если мы явно указываем список значений, то можем не указывать размер массива: компилятор сам подсчитает количество элементов:


                  Добавлено
                  по крайней мере сейчас компилируется без ошибок
                    Цитата kms @
                    да вот сделал так cols[]

                    Вообще неправильно. Даже не знаю, что это получилось. Сделай через unique_ptr.
                      к предыдущему коду (в посте#38) добавил
                      ExpandedWrap disabled
                        for (int i = 0; i < cntOp / sizeof(hcSqlDstInfoT); ++i)
                        {
                           const auto &col = cols[i];
                         //printf(" %ld ", cols[i] );
                         //Здесь разобрать буфер в зависимости от содержимого col
                        }

                      а hcSqlDstInfoT cols[2] = { 0 }; поставил для эксперимента cols[2] принудительно "2", чтобы посмотреть че будет.

                      Срабатывает, даже если раскаментирую printf(" %ld ", cols[i] ); тоже срабатывает и даже успеваю увидеть мелькает консоль и выводится несколько строк цыфр двухзначных, и следом окно ошибка
                      ExpandedWrap disabled
                        Необработанное исключение по адресу 0x009380D0 в AdmHyTech.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x003B0000.
                        Во-первых, если ты сделал cols[2] - то вместо pCol * sizeof(hcSqlDstInfoT) надо сделать sizeof(cols)
                        Во-вторых, посмотри, что возвращается в cntOp
                          что возвращается в cntOp --- 3435973836

                          Цитата Олег М @
                          Во-первых, если ты сделал cols[2] - то вместо pCol * sizeof(hcSqlDstInfoT) надо сделать sizeof(cols)

                          сделал , а теперь как правильно проконтролировать результат , вывести что там в cols[i]
                            std::cout << "aliasno = " << cols[i].aliasno << std::endl;
                            std::cout << "fieldno = " << cols[i].fieldno << std::endl;
                            //И так далее для всех полей hcSqlDstInfoT
                              оооочень много выводит а потом вываливается в ошибку
                              Прикреплённая картинка
                              Прикреплённая картинка
                                Цитата Олег М @
                                Во-вторых, посмотри, что возвращается в cntOp

                                Что там?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (19) 1 2 [3] 4 5 ...  18 19 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0583 ]   [ 18 queries used ]   [ Generated: 2.05.24, 22:24 GMT ]