Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.32.230] |
|
Страницы: (19) « Первая ... 15 16 [17] 18 19 все ( Перейти к последнему сообщению ) |
Сообщ.
#241
,
|
|
|
Цитата Олег М @ А ещё лучше объяви этот буфер так std::unique_ptr<char[]> bufOut(new char[pRecSize * _n50]); Не факт что у него такой код заведется. Он там на С++/CLI пишет, вот я как то не уверен что этот С++/CLI поддерживает новый стандарт, хотя могу и ошибаться, возможно в 15 студии они и сделали в этом C++/CLI поддержку хотя бы С++11 |
Сообщ.
#242
,
|
|
|
СерьезностьКодОписаниеПроектФайлСтрокаСостояние подавления ОшибкаC2440инициализация: невозможно преобразовать "std::unique_ptr<char [],std::default_delete<_Ty>>" в "char *"ComHyTech \desktop\comhytech\comhytech\comhytech.cpp79 Добавлено ОК , ошибка ушла Добавлено Цитата KILLER @ Не факт что у него такой код заведется. Он там на С++/CLI пишет, вот я как то не уверен что этот С++/CLI поддерживает новый стандарт, хотя могу и ошибаться, возможно в 15 студии они и сделали в этом C++/CLI поддержку хотя бы С++11 я DLL-ку клепаю щас код выложу , уже сделал Добавлено // 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 #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-ку |
Сообщ.
#243
,
|
|
|
Цитата kms @ 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), иначе как ты будешь импортировать потом это все? |
Сообщ.
#244
,
|
|
|
Цитата KILLER @ Ну и ты реально думаешь что у тебя вызоветься последний for ? нет конечно , это моя не аккуратность, сюда закопипастил так а в проге уже заметил справил Цитата KILLER @ Да и вообще я бы в виде класса все делал. да наверно надо делать как ты говоришь Цитата KILLER @ Тут в макросы нужно обернуть __declspec(dllexport), иначе как ты будешь импортировать потом это все? вообщем оно у меня вообще не работает , хотя компилится без ошибок делаю и DLL-ку и LIB-у , потом собираю тестовый проект подключаю все это хозяйство и не фига , куча ошибок |
Сообщ.
#245
,
|
|
|
Цитата kms @ вообщем оно у меня вообще не работает , хотя компилится без ошибок делаю и DLL-ку и LIB-у , потом собираю тестовый проект подключаю все это хозяйство и не фига , куча ошибок Все верно, это ожидаемо. Потому что ты экспортируешь свои функции, но не импортируешь. Надо писать что то типа того: #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% что тут я прав. |
Сообщ.
#246
,
|
|
|
KILLER подскажи пожалуста , как сделать так чтобы уйти от обращения к предыдущим dll-кам а работать только с одной
|
Сообщ.
#247
,
|
|
|
Цитата kms @ KILLER подскажи пожалуста , как сделать так чтобы уйти от обращения к предыдущим dll-кам а работать только с одной В каком смысле? Добавлено Я вопроса не понял просто От обращения к каким dll ты хочешь уйти? Добавлено Если ты про dll от базы данных HyTech, то лучше никак. Они полюбому должны быть с твоим проектом, потому как ты используешь их функционал. Добавлено Тебе по хорошему нужно правильно обернуть работу с БД в свой класс, по крайней мере так будет правильно. Но в принципе можно и функциями обойтись. Это будет работать, но с точки зрения проектирования - это будет не верным подходом. Т.е. это будет не совсем по феншую. А dll, которые ты используешь от БД - если просто - ты от них никак не уйдешь, и это правильно будет, не парься. |
Сообщ.
#248
,
|
|
|
Например:
сначала собираю 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-ку с учетом твоих поправок |
Сообщ.
#249
,
|
|
|
файл ComHyTech.h
#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 #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 ; } Добавлено ошибку дает вот на эту строку if (err = hcSqlAllocConnect(&pdb) != 0 ) return err ; // Создать соединение СерьезностьКодОписаниеПроектФайлСтрокаСостояние подавления ОшибкаC2664"hcERR hcSqlAllocConnect(hcHDB *)": невозможно преобразовать аргумент 1 из "cli::interior_ptr<hcHDB>" в "hcHDB *"TestHyTech \Desktop\TestHyTech_class\TestHyTech\ComHyTech.cpp21 |
Сообщ.
#250
,
|
|
|
Попробуй сделать так
hcHDB hDB; if (err = hcSqlAllocConnect(&hDB) != 0 ) return err ; // Создать соединение pdb = hDB; |
Сообщ.
#251
,
|
|
|
чето ошибка поперла
Прикреплённая картинка
Добавлено Цитата Олег М @ Попробуй сделать так ОК делаю Добавлено ОК про Цитата Олег М @ Попробуй сделать так hcHDB hDB; if (err = hcSqlAllocConnect(&hDB) != 0 ) return err ; // Создать соединение pdb = hDB; ОК прошло , Добавлено строка запроса из textBoxa заходит в класс как то криво вот код файл ComHyTech.h #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 #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 ; } Добавлено вот нажатие кнопки 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"); } |
Сообщ.
#252
,
|
|
|
Сообщ.
#253
,
|
|
|
Оппа пошло заменил
pOper = Konekt1.SqlQuery(pdb, (char*)(void*)Marshal::StringToHGlobalAnsi( textBox4->Text )); на pOper = Konekt1.SqlQuery(pdb, (char*)(void*)Marshal::StringToHGlobalAnsi( richTextBox1->Text )); и оно пошло Добавлено конечно класс у меня написан как курица лапой , некоторых вещей я еще не совсем догоняю , но если поможете постараюсь за пару дней перейти к DLL-ке |
Сообщ.
#254
,
|
|
|
Цитата kms @ постараюсь за пару дней перейти к DLL-ке Что-то я упустил. А зачем тебе вообще здесь ДЛЛка? |
Сообщ.
#255
,
|
|
|
подскажите , при нажатии на кнопку
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"); } как мне построить заполнение нужных переменных из класса, я предпологал что параметрами в функцию передаю ссылки но как то у меня не получаеться делаю напрмер вот так , в обработчике клика по кнопке int ИдентификаторОператора = 0; pOper = Konekt1.SqlQuery( &ИдентификаторОператора, pdb , (char*)(void*)Marshal::StringToHGlobalAnsi( richTextBox1->Text )); естественно что не так (руские буквы переменной это для внимания) Добавлено Цитата Олег М @ Что-то я упустил. А зачем тебе вообще здесь ДЛЛка? так я же хочу сделать конектор для HyTech , чтобы потом люди могли делать хоть че угодня , потом я хочу сделать Админку и при том DLL-ка пойдет уже под любой язык Добавлено сначала я естественно хочу разобраться с классом, а потом уже перейти к построению обертки DLL-ки |