На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
Страницы: (19) « Первая ... 17 18 [19]  все  ( Перейти к последнему сообщению )  
> Функция из DLL, Вывод данных
    Цитата KILLER @
    переходи или на чистый С++ или на C#

    если делать сразу на С# то еще трудней будет сделать обертку на "API клиентской части СУБД HyTech 2.5 (hscli)"

    делаю новую тему , если есть возможность помогите
      Цитата KILLER @
      если класс экспортировать в DLL, то скорее всего из того же C# врятли такой класс загрузишь из DLL, и вот тут на помощь придет C++/CLI, в принципе только за этим он и нужен.

      на 100% согласен :)
      "Многие ошибочно полагают, что JavaScript это некое подобие Java и они глубоко заблуждаются.. это асма для вэб!" :D
      "JavaScript is Lisp in C's clothing" © Douglas Crockford :victory:
      -------------------------------------------------------------------------------------------
      "Программирование БД в действии" https://github.com/Cfon/MFCSQLite3Demo
        Цитата KILLER @
        переходи или на чистый С++ или на C#.

        сейчас уже тему на на С++ сделана , сейчас еще сделаю на C#
          Всем большое спасибо, я думаю тему можно закрыть
            Думаю, тут можно поставить галку "Вопрос решён" и дать ссылку на C#-тему
            Windows as usual - my "wau" Windows experience
              Цитата Mr.Delphist @
              Думаю, тут можно поставить галку "Вопрос решён" и дать ссылку на C#-тему

              ОК полностью согласен, я просто не заметил что можно ставить галочку"Вопрос решен"

              так же хочу подвести черту , по данному вопросу вот получившийся исходник
              ExpandedWrap disabled
                #define HYCFG_WIN32
                 
                #include "hscli.h"
                #include <iostream>
                #include <memory>
                 
                #define SIZE_HCSQLDSTINFOT      128
                 
                int main() {
                    
                    int      err   = 0 ; // Код ошибки
                    int      pdb   = 0 ; // Адрес памяти, куда будет записан идентификатор   соединения.
                    int      pOper = 0 ; // Адрес памяти, куда будет записан идентификатор   оператора.
                 
                    int      pCol = 0     ; // количество колонок
                    long     pStr = 0     ; // количество строк  hcRECNO
                    unsigned cntOp = 0    ; // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".
                    unsigned pRecSize = 0 ; // Размер читаемой записи в байтах, в ф-ции "Открытие результатов для чтения" .
                 
                    hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации
                  
                    err = hcSqlInit(&Init)        ; // Инициализация клиентской части  
                    err = hcSqlCheckInit()        ; // Проверка завершения инициализации  
                    err = hcSqlAllocConnect(&pdb) ;//  Создать соединение
                    err = hcSqlConnect(pdb, "tcpip:/localhost:13000", "HTADMIN", "PASSWORD")    ; //Установить связь с СУБД  
                    err = hcSqlAllocStmt(pdb, &pOper)  ; // Создать оператор  
                    err = hcSqlSetStmtAttr(pOper, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) ; // ф-ция "Изменение параметров оператора" получаем расширенную инф.о полях
                    err = hcSqlExecDirect(pOper, "fix all;select * from TAB4;"); // Выполняем SQLзапрос  
                 
                    err = hcSqlNumResultCols(pOper, &pCol)   ;    // Получить кол-во колонок результата
                    err = hcSqlRowCount(pOper, &pStr)        ;    // Получить кол-во строк   результата
                    err = hcSqlOpenResults(pOper, &pRecSize) ;    // Открытие результатов для чтения
                 
                    hcSqlDstInfoT *infCol = new hcSqlDstInfoT[pCol]; // Структура "Информация о колонках результата"
                 
                    err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, infCol, pCol * SIZE_HCSQLDSTINFOT, &cntOp) ;// Получить информацию об операторе
                    
                    char     bufOut[1024];
                    unsigned cntOut = 0;
                    for (long i = 0; i < pStr; i++)//идем по строкам
                    {
                 
                        const auto err = hcSqlReadResults(pOper, i, bufOut, sizeof(bufOut), &cntOut);// Чтение результатов
                 
                        char *p = bufOut;
                 
                        for (size_t j = 0; j < cntOut / sizeof(hcSqlAliasInfoT); ++j)// идем по колонкам
                        {
                 
                            switch (infCol[j].type)// в зависимости от типа колонки преобразовываем в соответствующий тип
                            {
                            case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                            {
                                std::string s(p, infCol[j].len);
                                std::cout << s.c_str() << "  ";
                            }
                            break;
                 
                            case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_BYTE: // 2 Элемент - unsigned char (короткое целое)  short
                             std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                            break;
                 
                            case HSCLI_ET_INTR: // 3 Элемент - signed short  
                                std::cout << *reinterpret_cast<signed short *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_WORD: // 4 Элемент - unsigned short  
                                std::cout << *reinterpret_cast<unsigned short *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_DATE: // 5 Дата    - unsigned short  
                                std::cout << *reinterpret_cast<unsigned short *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_NMBR: //6  Номер   - 3-х байтовое целое без знака  
                                                // std::cout << *reinterpret_cast<  *>(p);
                                break;
                 
                            case HSCLI_ET_LONG: //7 Элемент - long int
                                std::cout << *reinterpret_cast<long int *>(p) << "  ";
                                break;
                 
                            case  HSCLI_ET_DWRD: // 8 Элемент - unsigned long int  в БД это dword          
                                std::cout << *reinterpret_cast<unsigned long int *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_FLOA: //  9  Элемент - float
                                std::cout << *reinterpret_cast<float *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_CURR: //  10 Деньги (double)  
                                std::cout << *reinterpret_cast<double *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_DFLT: // 11 Элемент - double  
                                std::cout << *reinterpret_cast<double *>(p) << "  ";
                                break;
                 
                            case HSCLI_ET_QINT: //  12 Элемент - signed __int64
                                std::cout << *reinterpret_cast<signed __int64 *>(p) << "  ";
                                break;
                            case HSCLI_ET_QWRD: //  13 Элемент - unsigned __int64
                                std::cout << *reinterpret_cast<unsigned __int64 *>(p) << "  ";
                                break;
                            }
                 
                            p += infCol[j].len;
                 
                        }
                 
                        std::cout << std::endl;
                    }
                 
                    hcSqlCloseResults(pOper); // Закрытие доступа к результатам
                    hcSqlFreeConnect(pdb);    // Освободить соединение
                    hcSqlDone();              // Завершение работы
                    
                    std::system("pause");
                }


              Добавлено
              Цитата Mr.Delphist @
              и дать ссылку на C#-тему

              сразу на С# не получится потому что выяснилось однозначно надо сначала сделать прослойку на С++/CLI
                Эх , как жаль , на С/С++ все так хорошо пошло , а на C# ни кто не хочет помочь
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                [ Script Execution time: 0,1137 ]   [ 15 queries used ]   [ Generated: 22.05.17, 15:39 GMT ]