На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (19) « Первая ... 15 16 [17] 18 19  все  ( Перейти к последнему сообщению )  
> Функция из DLL , Вывод данных
    Цитата Олег М @
    А ещё лучше объяви этот буфер так

    std::unique_ptr<char[]> bufOut(new char[pRecSize * _n50]);

    Не факт что у него такой код заведется. Он там на С++/CLI пишет, вот я как то не уверен что этот С++/CLI поддерживает новый стандарт, хотя могу и ошибаться, возможно в 15 студии они и сделали в этом C++/CLI поддержку хотя бы С++11
      ExpandedWrap disabled
        СерьезностьКодОписаниеПроектФайлСтрокаСостояние подавления
        ОшибкаC2440инициализация: невозможно преобразовать "std::unique_ptr<char [],std::default_delete<_Ty>>" в "char *"ComHyTech \desktop\comhytech\comhytech\comhytech.cpp79


      Добавлено
      Цитата Олег М @
      В hcSqlReadResults? Сделай там bufOut.get(). И char * p = bufOut.get();

      ОК , ошибка ушла

      Добавлено
      Цитата KILLER @
      Не факт что у него такой код заведется. Он там на С++/CLI пишет, вот я как то не уверен что этот С++/CLI поддерживает новый стандарт, хотя могу и ошибаться, возможно в 15 студии они и сделали в этом C++/CLI поддержку хотя бы С++11

      я DLL-ку клепаю щас код выложу , уже сделал

      Добавлено
      ExpandedWrap disabled
        // ComHyTech.cpp: определяет экспортированные функции для приложения DLL.
        //
         
         #include "stdafx.h"
         
        #define HYCFG_WIN32
        #include "HSCLI.H"
        //#include <cstring>
        #include <stdio.h>
        #include <string>
          
        #include <iostream>  
        #include <memory>
         
        #define SIZE_HCSQLDSTINFOT      128
         
            using namespace std;
         
            int      err = 0; // Код ошибки
            int      pdb = 0; // Адрес памяти, куда будет записан идентификатор   соединения.
            int      pOper = 0; // Адрес памяти, куда будет записан идентификатор   оператора.
         
            int      pCol = 0; // количество колонок
            long     pStr = 0; // количество строк  hcRECNO
            unsigned cntOp = 0; // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".
            unsigned pRecSize = 0; // Размер читаемой записи в байтах, в ф-ции "Открытие результатов для чтения" .
         
            string ConnectServer(char  *pStrConnect, char  *pStrLogin, char  *pStrPassword)
            {
                pStrConnect = "tcpip:/localhost:13000"; // (char*)(void*)Marshal::StringToHGlobalAnsi("");// Сервер
                pStrLogin = "HTADMIN";                //(char*)(void*)Marshal::StringToHGlobalAnsi("");// Логин
                pStrPassword = "PASSWORD"; //(char*)(void*)Marshal::StringToHGlobalAnsi("");// Пароль
         
                hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации
         
                if (err = hcSqlInit(&Init) != 0) return "Ошибка  Инициализация клиентской части  err= " + err; // Инициализация клиентской части  
                if (err = hcSqlCheckInit() < 0) return "Ошибка ""Завершения инициализации""       err= " + err; // Проверка завершения инициализации  
                if (err = hcSqlAllocConnect(&pdb) != 0) return "Ошибка ""Создать соединение""             err= " + err; //  Создать соединение
                if (err = hcSqlConnect(pdb, pStrConnect, pStrLogin, pStrPassword) != 0) return "Ошибка ""Установить связь с СУБД""  err= " + err; //Установить связь с СУБД  
         
                return "Функция ConnectServer завершила работу";
            }
         
            string SqlQuery(char  *pStrSql)
            {
                pStrSql = ""; //(char*)(void*)Marshal::StringToHGlobalAnsi("");// поле SQL
         
                if (err = hcSqlAllocStmt(pdb, &pOper) != 0) return "Ошибка ""Создать оператор""             err= " + err; // Создать оператор  
                if (err = hcSqlSetStmtAttr(pOper, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) != 0) return "Ошибка ""Изменение параметров оператора"" err= " + err;  // ф-ция "Изменение параметров оператора" получаем расширенную инф.о полях
                if (err = hcSqlExecDirect(pOper, pStrSql) != 0) return "Ошибка Выполнвыполнения SQL-запроса  err= " + err; // Выполняем SQLзапрос  
         
                if (err = hcSqlNumResultCols(pOper, &pCol) != 0) return "Ошибка Получить количество колонок результата  err= " + err;    // Получить количество колонок результата
                if (err = hcSqlRowCount(pOper, &pStr) != 0) return "Ошибка Получить количество строк результата  err= " + err;    // Получить количество строк результата
                if (err = hcSqlOpenResults(pOper, &pRecSize) != 0) return "Ошибка Открытие результатов для чтения  err= " + err;    // Открытие результатов для чтения
         
                hcSqlDstInfoT *infCol = new hcSqlDstInfoT[pCol]; // Структура "Информация о колонках результата"
         
                if (err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, infCol, pCol * SIZE_HCSQLDSTINFOT, &cntOp) != 0) return "Ошибка Получить информацию об операторе  err= " + err;// Получить информацию об операторе
         
                return "Функция SqlQuery завершила работу";
            }
         
            string  PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes)
            {
                static const size_t _n50 = 50;
          
                dataRes = new string*[_n50];
                for (int i = 0; i < pCol; ++i)
                    dataRes[i] = new string[_n50];
                
                //char *bufOut = new char[pRecSize * _n50]; // Адрес буфера для присылаемых записей.
                
                 unique_ptr<char[]> bufOut(new char[pRecSize * _n50]);
         
                unsigned cntOut = 0;                 // число байтов помещенных в буфер
         
                err = hcSqlReadResults(pOper, position, bufOut.get(), pRecSize * _n50, &cntOut);// Чтение результатов
         
                char *p = bufOut.get();                    // делаем указатель на буфер
         
                int nomRecBuf = cntOut / pRecSize;   // число записей записанных в буфер
         
                for (long ib = 1; ib <= nomRecBuf; ib++)   // перебираем строки записанные в буфер
                {
                        for (int j = 0; j < pCol; j++)  // идем по колонкам
                        {
         
                            switch (infCol[j].type)// в зависимости от типа
                            {
                            case HSCLI_ET_CHAR: { // 0 Массив символов длиной не более заданной
                                //dataRes[ib][j] = gcnew String(p, 0, infCol[j].len, System::Text::Encoding::GetEncoding(866)     )  ;// отладка
         
                            }
                                                break;
         
                            case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                dataRes[ib][j] = *reinterpret_cast<unsigned char *>(p);
                                break;
         
                            case HSCLI_ET_BYTE: { // 2 Элемент - unsigned char (короткое целое)  short
                                                  //textBox1->AppendText(" " + *reinterpret_cast<unsigned char *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<unsigned char *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_INTR: {// 3 Элемент - signed short  
                                                 //textBox1->AppendText(" " + *reinterpret_cast<signed short *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<signed short *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_WORD: { // 4 Элемент - unsigned short  
                                                  //textBox1->AppendText(" " + *reinterpret_cast<unsigned short *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<unsigned short *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_DATE: { // 5 Дата    - unsigned short  
                                                  //textBox1->AppendText(" " + *reinterpret_cast<unsigned short *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<unsigned short *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_NMBR: {//6  Номер   - 3-х байтовое целое без знака  
                                                 // std::cout << *reinterpret_cast<  *>(p);
                                                 //dataRes[ib][j] = ;
                            }
                                                break;
         
                            case HSCLI_ET_LONG: { //7 Элемент - long int
                                                  //textBox1->AppendText(" " + *reinterpret_cast<long int *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<long int *>(p);
                            }
                                                break;
         
                            case  HSCLI_ET_DWRD: { // 8 Элемент - unsigned long int  в БД это dword          
                                                   //textBox1->AppendText(" " + *reinterpret_cast<unsigned long int *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<unsigned long int *>(p);
                            }
                                                 break;
         
                            case HSCLI_ET_FLOA: { //    9  Элемент - float
                                                  //textBox1->AppendText(" " + *reinterpret_cast<float *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<float *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_CURR: { //    10 Деньги (double)  
                                                  //textBox1->AppendText(" " + *reinterpret_cast<double *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<double *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_DFLT: { // 11 Элемент - double  
                                                  //textBox1->AppendText(" " + *reinterpret_cast<double *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<double *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_QINT: { //    12 Элемент - signed __int64
                                                  //textBox1->AppendText(" " + *reinterpret_cast<signed __int64 *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<signed __int64 *>(p);
                            }
                                                break;
         
                            case HSCLI_ET_QWRD: { //    13 Элемент - unsigned __int64
                                                  //textBox1->AppendText(" " + *reinterpret_cast<unsigned __int64 *>(p) + " ");
                                dataRes[ib][j] = *reinterpret_cast<unsigned __int64 *>(p);
                            }
                                                break;
                            }
         
                            p += infCol[j].len;// сдвигаем указатель на длину поля, чтобы указывал на начало следующего поля
         
                        }
         
                }
                
                return ""; // Выгружаем  
                                
                                 for (int i = 0; i < pCol; ++i)
                                delete[] dataRes[i];
         
                                delete[] dataRes;
         
         
            }
            
            string CloseSqlQuery(int pOper)
            {
                hcSqlCloseResults(pOper); // Закрытие доступа к результатам
         
                return "Доступ закрыт";
            }
         
            string CloseConnectServer(int pdb)
            {
                hcSqlFreeConnect(pdb);    // Освободить соединение
                hcSqlDone();              // Завершение работы
         
                return "Соединение освободили работу завершили";
            }


      Добавлено
      файл ComHyTech.h
      ExpandedWrap disabled
        #pragma once
        #define HYCFG_WIN32
        #include "HSCLI.H"
        #include <string>
         
        using namespace std;
         
        __declspec(dllexport) string ConnectServer(char  *pStrConnect, char  *pStrLogin, char  *pStrPassword);
        __declspec(dllexport) string SqlQuery(char  *pStrSql);
        __declspec(dllexport) string  PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes);
        __declspec(dllexport) string CloseSqlQuery(int pOper);
        __declspec(dllexport) string CloseConnectServer(int pdb);


      Добавлено
      сейчас тестирую подключение через , эту dll-ку
        Цитата kms @

        ExpandedWrap disabled
                                  return ""; // Выгружаем  
           
                                   for (int i = 0; i < pCol; ++i)
                                       delete[] dataRes[i];
                                  delete[] dataRes;
               }


        Ну и ты реально думаешь что у тебя вызоветься последний for ?
        Да и вообще я бы в виде класса все делал.

        Цитата kms @
        #pragma once
        #define HYCFG_WIN32
        #include "HSCLI.H"
        #include <string>

        using namespace std;

        __declspec(dllexport) string ConnectServer(char *pStrConnect, char *pStrLogin, char *pStrPassword);
        __declspec(dllexport) string SqlQuery(char *pStrSql);
        __declspec(dllexport) string PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes);

        Тут в макросы нужно обернуть __declspec(dllexport), иначе как ты будешь импортировать потом это все?
          Цитата KILLER @
          Ну и ты реально думаешь что у тебя вызоветься последний for ?

          нет конечно , это моя не аккуратность, сюда закопипастил так а в проге уже заметил справил

          Цитата KILLER @
          Да и вообще я бы в виде класса все делал.

          да наверно надо делать как ты говоришь

          Цитата KILLER @
          Тут в макросы нужно обернуть __declspec(dllexport), иначе как ты будешь импортировать потом это все?

          вообщем оно у меня вообще не работает , хотя компилится без ошибок делаю и DLL-ку и LIB-у , потом собираю тестовый проект подключаю все это хозяйство и не фига , куча ошибок
            Цитата kms @
            вообщем оно у меня вообще не работает , хотя компилится без ошибок делаю и DLL-ку и LIB-у , потом собираю тестовый проект подключаю все это хозяйство и не фига , куча ошибок

            Все верно, это ожидаемо. Потому что ты экспортируешь свои функции, но не импортируешь.
            Надо писать что то типа того:
            ExpandedWrap disabled
              #pragma once
              #define HYCFG_WIN32
              #include "HSCLI.H"
              #include <string>
               
               
              #ifdef MY_DLLAPI_EXPORT
              #define MY_DLLAPI __declspec(dllexport)
              #else
              #define MY_DLLAPI __declspec(dllimport)
              #endif
               
              using namespace std;
               
              extern "C"
              {
                 MY_DLLAPI string ConnectServer(char *pStrConnect, char *pStrLogin, char *pStrPassword);
                 MY_DLLAPI string SqlQuery(char *pStrSql);
                 MY_DLLAPI string PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes);
              }

            И в проекте, где у тебя компилируется сама DLL, в опциях проекта в Preprocessor definition прописать MY_DLLAPI_EXPORT
            В том проекте где используешь свою DLL ничего не нужно делать.

            Добавлено
            MY_DLLAPI_EXPORT и MY_DLLAPI можешь по своему обозвать, это я так, для примера их обозвал.

            Добавлено
            И еще обернуть эти функции в extern "C" не забудь. Я там в коде что тебе привел, ща поправлю.

            Добавлено
            И еще - возвращать std::string из функций в DLL чревато косяками. Нужно бы возвращать const char*, потому что в противном случае по идее может быть бинарная несовместимость с новыми/старыми версиями stl. Но я не уверен на 100% что тут я прав.
            Сообщение отредактировано: KILLER -
              KILLER подскажи пожалуста , как сделать так чтобы уйти от обращения к предыдущим dll-кам а работать только с одной
                Цитата kms @
                KILLER подскажи пожалуста , как сделать так чтобы уйти от обращения к предыдущим dll-кам а работать только с одной

                В каком смысле?

                Добавлено
                Я вопроса не понял просто :) От обращения к каким dll ты хочешь уйти?

                Добавлено
                Если ты про dll от базы данных HyTech, то лучше никак. Они полюбому должны быть с твоим проектом, потому как ты используешь их функционал.

                Добавлено
                Тебе по хорошему нужно правильно обернуть работу с БД в свой класс, по крайней мере так будет правильно. Но в принципе можно и функциями обойтись. Это будет работать, но с точки зрения проектирования - это будет не верным подходом. Т.е. это будет не совсем по феншую. А dll, которые ты используешь от БД - если просто - ты от них никак не уйдешь, и это правильно будет, не парься.
                Сообщение отредактировано: KILLER -
                  Например:
                  сначала собираю ComHyTech.dll она использует ф-ции из hscli.dll,
                  сама hscli.dll очень старая написана на Си , поэтому приходится использовать #define HYCFG_WIN32,

                  так вот как так сделать чтобы уже ComHyTech.dll делать на чистом С++ ,
                  и так как из ComHyTech.dll идет подключение к hscli.dll приходится в конечном приложении указывать и hscli.h и ComHyTech.h
                  и опять все это #define HYCFG_WIN32

                  а как все это сделать красиво чисто на С++

                  Добавлено
                  KILLER океюшки , я все внимательно прочитал, сейчас к вечеру все это переработаю,
                  буду делать так :
                  1) делаю класс
                  2) если класс работает , делаю dll-ку с учетом твоих поправок
                    файл ComHyTech.h
                    ExpandedWrap disabled
                      #pragma once
                      #define HYCFG_WIN32
                      #include "HSCLI.H"
                      #include <cstring>
                      #include <stdio.h>
                      #include <string>
                      #include <iostream>  
                      #include <memory>
                       
                      using namespace std;
                       
                      #define SIZE_HCSQLDSTINFOT      128
                       
                      ref class ComHyTech
                      {
                      public:
                          ComHyTech();
                          
                          int ConnectServer(char  *pStrConnect, char  *pStrLogin, char  *pStrPassword);
                          int SqlQuery(char  *pStrSql);
                          int PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes);
                          int CloseSqlQuery(int pOper);
                          int CloseConnectServer(int pdb);
                       
                       
                          int      err = 0; // Код ошибки
                          hcHDB      pdb = 0; // Адрес памяти, куда будет записан идентификатор   соединения.
                          int      pOper = 0; // Адрес памяти, куда будет записан идентификатор   оператора.
                       
                          int      pCol = 0; // количество колонок
                          long     pStr = 0; // количество строк  hcRECNO
                          unsigned cntOp = 0; // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".
                          unsigned pRecSize = 0; // Размер читаемой записи в байтах, в ф-ции "Открытие результатов для чтения" .
                       
                       
                      };


                    файл ComHyTech.cpp
                    ExpandedWrap disabled
                      #define HYCFG_WIN32
                      #include "HSCLI.H"
                      #include "ComHyTech.h"
                       
                      using namespace std;
                       
                      ComHyTech::ComHyTech()
                      {
                      }
                       
                      int ComHyTech::ConnectServer(char  *pStrConnect, char  *pStrLogin, char  *pStrPassword)
                      {
                          pStrConnect  = "tcpip:/localhost:13000"; // (char*)(void*)Marshal::StringToHGlobalAnsi("");// Сервер
                          pStrLogin    = "HTADMIN";                //(char*)(void*)Marshal::StringToHGlobalAnsi("");// Логин
                          pStrPassword = "PASSWORD"; //(char*)(void*)Marshal::StringToHGlobalAnsi("");// Пароль
                       
                          hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации
                       
                          if (err = hcSqlInit(&Init)        != 0 ) return err ; // Инициализация клиентской части  
                          if (err = hcSqlCheckInit()         < 0 ) return err ; // Проверка завершения инициализации  
                          if (err = hcSqlAllocConnect(&pdb) != 0 ) return err ; // Создать соединение
                          if (err = hcSqlConnect(pdb, pStrConnect, pStrLogin, pStrPassword) != 0) return err; //Установить связь с СУБД  
                       
                          return 0 ;
                      }


                    Добавлено
                    ошибку дает вот на эту строку
                    ExpandedWrap disabled
                      if (err = hcSqlAllocConnect(&pdb) != 0 ) return err ; // Создать соединение


                    ExpandedWrap disabled
                      СерьезностьКодОписаниеПроектФайлСтрокаСостояние подавления
                      ОшибкаC2664"hcERR hcSqlAllocConnect(hcHDB *)": невозможно преобразовать аргумент 1 из "cli::interior_ptr<hcHDB>" в "hcHDB *"TestHyTech \Desktop\TestHyTech_class\TestHyTech\ComHyTech.cpp21
                      Попробуй сделать так
                      ExpandedWrap disabled
                           hcHDB hDB;
                           if (err = hcSqlAllocConnect(&hDB) != 0 ) return err ; // Создать соединение
                           pdb = hDB;
                        чето ошибка поперла
                        Прикреплённая картинка
                        Прикреплённая картинка


                        Добавлено
                        Цитата Олег М @
                        Попробуй сделать так

                        ОК делаю

                        Добавлено
                        ОК про
                        Цитата Олег М @
                        Попробуй сделать так

                           hcHDB hDB;
                           if (err = hcSqlAllocConnect(&hDB) != 0 ) return err ; // Создать соединение
                           pdb = hDB;


                        ОК прошло ,

                        Добавлено
                        строка запроса из textBoxa заходит в класс как то криво
                        вот код
                        файл ComHyTech.h
                        ExpandedWrap disabled
                          #pragma once
                          #define HYCFG_WIN32
                          #include "HSCLI.H"
                           
                          #include <cstring>
                          #include <stdio.h>
                          #include <string>
                          #include <iostream>  
                          #include <memory>
                           
                          #define SIZE_HCSQLDSTINFOT      128
                           
                          public ref class ComHyTech
                          {
                                int      err = 0; // Код ошибки
                                int      pdb = 0; // Адрес памяти, куда будет записан идентификатор   соединения.
                                int      pOper = 0; // Адрес памяти, куда будет записан идентификатор   оператора.
                                int      pCol = 0; // количество колонок
                                long     pStr = 0; // количество строк  
                                unsigned pRecSize = 0; // Размер читаемой записи в байтах, в ф-ции "Открытие результатов для чтения" .
                                unsigned cntOp = 0; // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".
                           
                              public:
                                 ComHyTech( );
                                  int ConnectServer(  char*   pStrConnect , char * pStrLogin, char * pStrPassword);//char  *pStrConnect, char  *pStrLogin, char  *pStrPassword
                                  int SqlQuery(int pdb, char  *pStrSql);
                                  //int PasStr(int pOper, hcSqlDstInfoT *infCol, long position, unsigned pRecSize, int pCol, long pStr, string** dataRes);
                                  //int CloseSqlQuery(int pOper);
                                  //int CloseConnectServer(int pdb);
                           
                          };


                        вот ComHyTech.cpp
                        ExpandedWrap disabled
                          #define HYCFG_WIN32
                           
                          #include "ComHyTech.h"
                           
                           
                              ComHyTech::ComHyTech( ) { }
                           
                              int ComHyTech::ConnectServer( char* pStrConnect, char *  pStrLogin, char*  pStrPassword)
                              {
                                  hcHDB    hdb = 0; // Адрес памяти, куда будет записан идентификатор   соединения.
                                  
                                  hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации
                           
                                      if (err = hcSqlInit(&Init) != 0) return err; // Инициализация клиентской части  
                                      if (err = hcSqlCheckInit()  < 0) return err; // Проверка завершения инициализации  
                                      if (err = hcSqlAllocConnect(&hdb) != 0) return err; // Создать соединение
                                      pdb = hdb;
                                      if (err = hcSqlConnect(pdb, pStrConnect, pStrLogin, pStrPassword) != 0) return err; //Установить связь с СУБД  
                                  
                                  return pdb;
                              }
                              
                              int ComHyTech::SqlQuery(int pdb, char  *pStrSql)
                              {
                                  int pOperTemp;
                                  unsigned int cntOpTemp;
                           
                                  //pStrSql = "fix all; select * from CITY"; //(char*)(void*)Marshal::StringToHGlobalAnsi("");// поле SQL
                           
                                  if (err = hcSqlAllocStmt(pdb,    &pOperTemp) != 0) return   err; // Создать оператор  
                                  pOper = pOperTemp;
                                  if (err = hcSqlSetStmtAttr(pOper, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) != 0) return err;  // ф-ция "Изменение параметров оператора" получаем расширенную инф.о полях
                                  if (err = hcSqlExecDirect(pOper, pStrSql) != 0) return   err; // Выполняем SQLзапрос  
                           
                                  //if (err = hcSqlNumResultCols(pOper,  &pCol) != 0) return   err; // Получить количество колонок результата
                                  //if (err = hcSqlRowCount(pOper,  &pStr) != 0) return   err; // Получить количество строк результата
                                  //if (err = hcSqlOpenResults(pOper,  &pRecSize) != 0) return   err; // Открытие результатов для чтения
                           
                                  hcSqlDstInfoT *infCol = new hcSqlDstInfoT[pCol]; // Структура "Информация о колонках результата"
                           
                                  if (err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, infCol, pCol * SIZE_HCSQLDSTINFOT, &cntOpTemp) != 0)
                                      return   err;// Получить информацию об операторе
                           
                                  cntOp = cntOpTemp;
                           
                                  return pOper ;
                              }


                        Добавлено
                        вот нажатие кнопки
                        ExpandedWrap disabled
                          private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                                  ComHyTech Konekt1;
                           
                                  int pdb = 0;
                                  int pOper = 0;
                           
                                   char  *pStrConnect  =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text );// Сервер
                                   char  *pStrLogin    =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox2->Text);// Логин
                                   char  *pStrPassword =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox3->Text);// Пароль
                           
                                   pdb = Konekt1.ConnectServer(   pStrConnect, pStrLogin, pStrPassword) ;
                                  
                                   pOper = Konekt1.SqlQuery(pdb, (char*)(void*)Marshal::StringToHGlobalAnsi(textBox3->Text  ));
                                    
                                   textBox5->AppendText(" pdb = "  + pdb + "\r\n");
                                   textBox5->AppendText(" pOper = " + pOper + "\r\n");
                           
                              }
                          вот сама форма , главное точка с запятой ; есть а сервер кричит нету
                          Прикреплённая картинка
                          Прикреплённая картинка
                            Оппа пошло заменил
                            ExpandedWrap disabled
                              pOper = Konekt1.SqlQuery(pdb, (char*)(void*)Marshal::StringToHGlobalAnsi(  textBox4->Text   ));

                            на
                            ExpandedWrap disabled
                              pOper = Konekt1.SqlQuery(pdb, (char*)(void*)Marshal::StringToHGlobalAnsi(  richTextBox1->Text   ));


                            и оно пошло

                            Добавлено
                            конечно класс у меня написан как курица лапой , некоторых вещей я еще не совсем догоняю , но если поможете
                            постараюсь за пару дней перейти к DLL-ке
                              Цитата kms @
                              постараюсь за пару дней перейти к DLL-ке

                              Что-то я упустил. А зачем тебе вообще здесь ДЛЛка?
                                подскажите , при нажатии на кнопку
                                ExpandedWrap disabled
                                  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                                          
                                          ComHyTech Konekt1;
                                          
                                          int pOper = 0;
                                   
                                          char  *pStrConnect  =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text); // Сервер
                                          char  *pStrLogin    =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox2->Text); // Логин
                                          char  *pStrPassword =  (char*)(void*)Marshal::StringToHGlobalAnsi(textBox3->Text); // Пароль
                                   
                                          int pdb = Konekt1.ConnectServer(     pStrConnect, pStrLogin, pStrPassword  ) ;
                                          
                                          pOper = Konekt1.SqlQuery(pdb ,  (char*)(void*)Marshal::StringToHGlobalAnsi(  richTextBox1->Text   ));
                                            
                                          textBox5->AppendText(" pdb2 = "  + pdb  + "\r\n");
                                          textBox5->AppendText(" pOper = " + pOper + "\r\n");
                                   
                                      }

                                как мне построить заполнение нужных переменных из класса, я предпологал что параметрами в функцию передаю ссылки
                                но как то у меня не получаеться
                                делаю напрмер вот так , в обработчике клика по кнопке
                                ExpandedWrap disabled
                                  int ИдентификаторОператора = 0;
                                          pOper = Konekt1.SqlQuery( &ИдентификаторОператора, pdb ,  (char*)(void*)Marshal::StringToHGlobalAnsi(  richTextBox1->Text   ));

                                естественно что не так (руские буквы переменной это для внимания)

                                Добавлено
                                Цитата Олег М @
                                Что-то я упустил. А зачем тебе вообще здесь ДЛЛка?

                                так я же хочу сделать конектор для HyTech , чтобы потом люди могли делать хоть че угодня , потом я хочу сделать Админку
                                и при том DLL-ка пойдет уже под любой язык

                                Добавлено
                                сначала я естественно хочу разобраться с классом, а потом уже перейти к построению обертки DLL-ки
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1036 ]   [ 20 queries used ]   [ Generated: 3.05.24, 16:44 GMT ]