Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2012, 12:42   #1
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию Функции в С++

(если у вас предвзятое отношение к плохому коду не читайте дальше )
Подскажите как правильно должно быть оформлен вызов функции.
Да и оформление программы ,что должно быть в *.h что в *.cpp

допустим есть в файле form1.h событие




Код:
if ((this->textBox_login->Text) == "10" && (this->textBox_password->Text) == "10")
вот тут мне нужно вместо чисел 10 вызвать функцию запроса в бд и проверку на правильность.сама функция находиться в файле *.cpp

как все правильно это оформить?

если кому интересно проект во вложении.(это на самом деле первый опыт изучения с++ с нуля,куча ошибок в оформлении ,слабонервным не смотреть)

Во вложенном файле простейшая форма авторизации ,которую я пытаюсь подключить к mysql)))
Вложения
Тип файла: rar Trade.rar (16.8 Кб, 496 просмотров)
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 12.03.2012 в 14:41.
partizanes вне форума   Ответить с цитированием
Старый 12.03.2012, 13:08   #2
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

.h нужен для того что подключать написаные тобой классы, функкии к другим файлам.

.cpp содержит определения.

В .h
Код:
void foo();
В .cpp
Код:
void foo()
{
    printf("Hello");
}
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
evilstar (12.03.2012), KiriX (12.03.2012), lovepsone (19.06.2012), Mayss (13.03.2012), partizanes (12.03.2012)
Старый 12.03.2012, 13:28   #3
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

пишем в *.h

PHP код:
else if ((this->textBox_login->Text) != "" && (this->textBox_password->Text) != "")
                 {
                 
void msg();
                 } 
в *.сpp

PHP код:
void msg()
{
Windows::Forms::MessageBox::Show("hello");

сообщение не выводиться ,Break в *.cpp не срабатывает
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 12.03.2012, 15:28   #4
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от partizanes Посмотреть сообщение
пишем в *.h

PHP код:
else if ((this->textBox_login->Text) != "" && (this->textBox_password->Text) != "")
                 {
                 
void msg();
                 } 
в *.сpp

PHP код:
void msg()
{
Windows::Forms::MessageBox::Show("hello");

сообщение не выводиться ,Break в *.cpp не срабатывает

нет, вот так

.h

PHP код:
void msg();

...

else if ((
this->textBox_login->Text) != "" && (this->textBox_password->Text) != "")
                 {
                 
msg();
                 } 
в .cpp все верно.

PS у вас слишком массивная функция в .h может лучше вот так ее тоже сделать?

.h
PHP код:
System::Void button1_Click(System::Object^  senderSystem::EventArgs^  e); 
.cpp
PHP код:
private: System::Void button1_Click(System::Object^  senderSystem::EventArgs^  e) {
             {

                 if ((
this->textBox_login->Text) == "")
                 {
                     if ((
this->textBox_password->Text) == "")
                     {
                         
Windows::Forms::MessageBox::Show("Введите Имя Пользователя и Пароль");
                         return;
                     }
                     
Windows::Forms::MessageBox::Show("Введите Имя Пользователя");             
                     return;
                 }
                 else if ((
this->textBox_password->Text) == "")
                 {
                     
Windows::Forms::MessageBox::Show("Введите Ваш Пароль");             
                     return;
                 }
             if ((
this->textBox_login->Text) == "10" && (this->textBox_password->Text) == "10")
             {
                
login_form->Hide();
                
menuStrip1->Visible true ;
                
panel1->Visible true ;
             } 
                
             else 
                {
                 
Windows::Forms::MessageBox::Show("Неправильное Имя Пользователя или Пароль");
                }
             } 
            } 
Я конечно не шарю в WinAPI но раз у вас есть private: макрос, то функция в классе. Тогда в .cpp перед ней еще имя класса укажите.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (12.03.2012)
Старый 12.03.2012, 18:32   #5
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

я так понимаю что бы начать понимать api , mfc и т.д нужно досконально изучить разработку консольных приложений?
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 12.03.2012, 22:23   #6
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

а если так в *.h
Код:
int msg(int a);
...
private: System::Void quitToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
		  	 int a = 5; //равно 5
			 msg(a);   
			                   //по идеи тут должно быть 15 ,а реально 5
			 this->Close();
		 }
а в *.cpp
Код:
int msg (int a)
{
	a = a+10 ; //равно 15
	return(a); //вернуть значение в вызывавшую функцию
};
Почему в данном случае функция не возвращает значение?
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 12.03.2012, 22:41   #7
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Потомучто что, переменная а локальная, там и там.
Den вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (12.03.2012)
Старый 12.03.2012, 23:13   #8
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Что-то больше похоже на С++/CLI чем на С++...
TOM_RUS вне форума   Ответить с цитированием
Старый 12.03.2012, 23:23   #9
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Что-то больше похоже на С++/CLI чем на С++...
а я думаю что вы правы

Просто я еще сам до конца не понял )


Цитата:
Сообщение от Den Посмотреть сообщение
Потомучто что, переменная а локальная, там и там.
ушел перечитывать главу про глобальные и локальные переменные
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 12.03.2012 в 23:26.
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 00:13   #10
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Не получается разобраться,подскажите может кто сталкивался.

Код:
mysql_init(&mysql);  // Инициализация
	 mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, CLIENT_FOUND_ROWS); // соединение

	 if (mysql_query(&mysql, query) > 0) // запорс. Если ошибок нет, то продолжаем работу
	 {

		 // Если была ошибка, ...(Здесь ошибку не выводит)
		 Windows::Forms::MessageBox::Show(ToUCS2(mysql_error(&mysql)));  // ... вывдем ее
		 return; // и завершим работу
	 }
	 res = mysql_use_result(&mysql); // Берем результат,
	 if(res == NULL)
	 {
		 Windows::Forms::MessageBox::Show(ToUCS2(mysql_error(&mysql))); 
// (выводит только тут)(mysql server has gone away)
		 mysql_ping(&mysql);
		 mysql_query(&mysql, query);
		 res = mysql_store_result(&mysql);
	 }
	 
	 int num_fields = mysql_num_fields(res); // количество полей
	 my_ulonglong num_rows = mysql_num_rows(res); // и количество строк.
отваливается на int num_fields = mysql_num_fields(res);
так как по дебагу
Код:
res	<undefined value>	st_mysql_res*
Код:
A first chance exception of type 'System.AccessViolationException' occurred in Trade.exe
An unhandled exception of type 'System.AccessViolationException' occurred in Trade.exe

Additional information: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
дописал кусочек(синий код) после чего хоть что начало писать
итог "mysql server has gone away "

сам запрос
Код:
void auth()
{
	mysql("SELECT * FROM users"); // Запрос
}





Проверенно на 3 разных серверах mysql с разной конфигурацией
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 1495
Размер:	80.1 Кб
ID:	1119   Нажмите на изображение для увеличения
Название: 2.jpg
Просмотров: 1522
Размер:	155.1 Кб
ID:	1120  
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 01:40   #11
Deamon
WowCore Dev
 
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
Deamon Скоро придёт к известности
По умолчанию

Я возможно отстал от жизни, но где в этом коде вызов mysql_select_db?
Deamon вне форума   Ответить с цитированием
Старый 20.03.2012, 09:27   #12
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Deamon Посмотреть сообщение
Я возможно отстал от жизни, но где в этом коде вызов mysql_select_db?
наверное тут...
Код:
mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, CLIENT_FOUND_ROWS);
на скриншотах видно, что и дб выбирается и пароли)))
возможно поможет , так как сам разве что с sqlite работал
Код:
When using mysql_use_result(), you must execute mysql_fetch_row() until a NULL value is returned, otherwise, the unfetched rows are returned as part of the result set for your next query
Evgeniy вне форума   Ответить с цитированием
Старый 20.03.2012, 10:05   #13
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

в первом случае используется
Код:
res = mysql_use_result(&mysql); // Берем результат,
а вот после того уже если ничего нету
Код:
if(res == NULL)
на всякий случай делаем проверку на соединение
Код:
mysql_ping(&mysql);
делаем повторный запрос
Код:
mysql_query(&mysql, query);
пытаемся повторно извлечь результат
Код:
res = mysql_store_result(&mysql);
если поставить еще раз выводить ошибку
Код:
Windows::Forms::MessageBox::Show(ToUCS2(mysql_error(&mysql)));
получаем mysql server has gone away
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 10:06   #14
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от partizanes Посмотреть сообщение
итог "mysql server has gone away"
слишком тяжелый запрос для МуСКЛ. Попробовать сократить выборку.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 20.03.2012, 10:12   #15
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Цитата:
Сообщение от tempura Посмотреть сообщение
слишком тяжелый запрос для МуСКЛ. Попробовать сократить выборку.
так в той таблице 2 значения и 2 колонки.
и эта ошибка не всегда связанна с тяжестью запроса

Код:
http://www.mysql.ru/docs/man/Gone_away.html
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 20.03.2012 в 10:22.
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 11:32   #16
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

работает...черт меня побери
Код:
#include        <windows.h>
#include	<stdio.h>
#include	<mysql.h>

int main(int argc, char* argv[])
{
  MYSQL *conn;
  MYSQL_RES *result;
  MYSQL_ROW row;
  int num_fields;
  int i;

  conn = mysql_init(NULL);
  mysql_real_connect(conn, "localhost", "root", "passwd", "realmd", 0, NULL, CLIENT_FOUND_ROWS);

  mysql_query(conn, "SELECT * FROM account");
  result = mysql_use_result(conn);

  num_fields = mysql_num_fields(result);

  while ((row = mysql_fetch_row(result)))
  {
      for(i = 0; i < num_fields; i++)
      {
          printf("%s ", row[i] ? row[i] : "NULL");
      }
      printf("\n");
  }

  mysql_free_result(result);
  mysql_close(conn);
}
Evgeniy вне форума   Ответить с цитированием
Старый 20.03.2012, 12:09   #17
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Код:
printf("\n");
С выводом в консоль я делал раньше ,там как то без проблем.

а вот перенести на С++/CLI не выходит
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 13:13   #18
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от partizanes Посмотреть сообщение
Код:
printf("\n");
С выводом в консоль я делал раньше ,там как то без проблем.

а вот перенести на С++/CLI не выходит
mysql_options(conn, MYSQL_OPT_RECONNECT, "1");
может добавить?
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (20.03.2012)
Старый 20.03.2012, 13:31   #19
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

по документации получается что если MYSQL_OPT_RECONNECT 0
Цитата:
Checks whether the connection to the server is working. If the connection has gone down and auto-reconnect is enabled an attempt to reconnect is made. If the connection is down and auto-reconnect is disabled, mysql_ping() returns an error.
то mysql_ping() реконектится не будет,а только вернет ошибку,кхм я думал что будет .
проверю вечером как приду с работы .

все равно почему пропадает соединение

по все той же документации получается что пропасть может если max_allowed_packet маленький или запрос не правильный.
но вроде все правильно.а ответа нету.
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 20.03.2012 в 13:50.
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 19:21   #20
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

я думаю что нашел ответ на свой вопрос )
подключил лог к mysql

Цитата:
120320 19:13:55 4 Connect Client does not support authentication protocol requested by server; consider upgrading MySQL client
4 Connect root@localhost on trade
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 20.03.2012 в 19:59.
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 21:55   #21
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Не могу понять как указать в trade.cpp на dataGridView1 в Form1.h(public ref class Form1 : public System::Windows::Forms::Form)

Код:
DataGridView^ dataGridView1;
?



ловлю
Цитата:
A first chance exception of type 'System.NullReferenceException' occurred in System.Windows.Forms.dll
An unhandled exception of type 'System.NullReferenceException' occurred in System.Windows.Forms.dll

Additional information: Ссылка на объект не указывает на экземпляр объекта.
наверно вот так

Цитата:
DataGridView^ dataGridView1 = gcnew DataGridView;
Проект во вложении

и еще вопрос ,можно ли делать так (какое оформление правильное)

было

Код:
private: System::Windows::Forms::Button^  login_button;						
private: System::Windows::Forms::Button^  cancel_button;
private: System::Windows::Forms::GroupBox^  login_form;
private: System::Windows::Forms::TextBox^  textBox_password;
private: System::Windows::Forms::TextBox^  textBox_login;

делаем
Код:
private:
System::Windows::Forms::
		Button^  login_button;						
		Button^  cancel_button;					
		
		GroupBox^  login_form;
		TextBox^  textBox_password;
		TextBox^  textBox_login;
Вложения
Тип файла: rar Trade.rar (985.2 Кб, 479 просмотров)
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 20.03.2012 в 23:30.
partizanes вне форума   Ответить с цитированием
Старый 20.03.2012, 23:53   #22
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

А зачем использовать libmysql.lib, если есть сборка коннектора mysql под .NET?

http://www.mysql.com/downloads/connector/net/
http://www.mysql.com/downloads/mirror.php?id=406540
Вложения
Тип файла: rar Trade.rar (176.8 Кб, 497 просмотров)

Последний раз редактировалось TOM_RUS; 21.03.2012 в 16:46.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (21.03.2012)
Старый 21.03.2012, 10:07   #23
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

ну тогда я вообще удивлен...
http://www.mysql.com/downloads/connector/cpp/
а вот эта штука для чего сделана?
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 21.03.2012, 12:49   #24
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от tempura Посмотреть сообщение
ну тогда я вообще удивлен...
http://www.mysql.com/downloads/connector/cpp/
а вот эта штука для чего сделана?
Возможно OOП альтернатива для libmysql.dll, там mysqlcppconn.dll вроде классы какие-то экспортирует...
TOM_RUS вне форума   Ответить с цитированием
Старый 22.03.2012, 21:58   #25
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Подскажите как преобразовать "System::String ^" в "cli::array<Type> ^"
прочитал много статей ,но увы не подошел ни один из результатов.


https://github.com/partizanes/trade/...e1b1436155a401



to TOM_RUS:
Код:
catch (Exception^ exc)
            {
                MessageBox::Show("Exception: " + exc->Message);
            }
            finally
            {
                if (reader != nullptr)
                    reader->Close();
            }
            return authok;
Вы использовали проверку на исключения ,а как можно проверить было ли исключение ?
(при появлении исключения , появляется MessageBox и с исключение и с не правильным паролем)

пытался что то типа

Код:
if (authok = false) && !(exc->Message)
{
Windows::Forms::MessageBox::Show("Неправильное Имя Пользователя или Пароль");
}
но как можно использовать указатель на (exc->Message) вне catch (Exception^ exc)


Спасибо вам за помощь в освоении конектора .
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 22.03.2012 в 22:54.
partizanes вне форума   Ответить с цитированием
Старый 22.03.2012, 22:56   #26
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Код:
array<Byte>^data = System::Text::Encoding::ASCII->GetBytes("hello world")
__________________
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (22.03.2012)
Старый 22.03.2012, 23:07   #27
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Спасибо ,именно этого кирпичика мне не хватало для получения md5
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 22.03.2012, 23:46   #28
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

по аналогии с джава:
Код:
catch (IncorrectLoginException^ exc){
                MessageBox::Show("Exception input login: " + exc->Message);
}
catch (Exception^ exc){
                MessageBox::Show("Exception: " + exc->Message);
}finally{
   if (reader != nullptr)
                    reader->Close();
}
чем ниже спускаемся - тем более общий уровень Exception...ну а ловить желательно только свои ексепшены
Код:
if (authok = false)
Throw IncorrectLoginException
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (23.03.2012)
Старый 23.03.2012, 22:19   #29
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
по аналогии с джава:
Код:
if (authok = false)
Throw IncorrectLoginException
в том то и вся проблема что (authok = false) при неудачной авторизации по умолчанию ,не зависимо mysql отвалился или что то еще

Пока не удалось мне сделать исключение верно,видимо мне еще читать и читать про исключения до просветления )))

вопрос по md5 ,безопасно ли так хранить пароль?
// и насколько с точки зрения синтаксиса верна строка.


Создаю пользователя, пароль перегоняю в md5
Цитата:
cmd = gcnew MySqlCommand("INSERT INTO `users` VALUES (NULL,"+"'"+login+"'"+","+"'"+System::Text::Encodi ng::ASCII->GetString(MD5hash(System::Text::Encoding::ASCII->GetBytes(pass)))+"'"")",conn);
при авторизации проверяю
Цитата:
if(Auth(textBox_login->Text, System::Text::Encoding::ASCII->GetString(MD5hash(System::Text::Encoding::ASCII->GetBytes(textBox_password->Text)))))
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 25.03.2012, 13:33   #30
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

хеш пароля генерировать с солью...тогда будет понадежнее
Evgeniy вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
partizanes (25.03.2012), tempura (26.03.2012)
Старый 25.03.2012, 16:11   #31
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

как то так? создаем переменную
Цитата:
String^ salt = System::Text::Encoding::ASCII->GetString(MD5hash(System::Text::Encoding::ASCII->GetBytes("135a")));
а потом приписываем при создании пароля и авторизации?
Цитата:
cmd = gcnew MySqlCommand("INSERT INTO `users` VALUES (NULL,"+"'"+login+"'"+","+"'"+salt+System::Text::E ncoding::ASCII->GetString(MD5hash(System::Text::Encoding::ASCII->GetBytes(pass)))+"'"+")",conn);
как я понял спасет только от "радужных таблиц" ?
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 25.03.2012, 16:27   #32
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

  • hash = md5(salt + md5(pass))
  • hash = md5(md5(salt) + md5(pass))
  • hash = md5(md5(salt + pass))
так не будет видно соли
я бы посоветывал использовать нативную mysql функцию MD5() приятнее для чтения..и лучше переписать на Prepared Statement ...а то мало ли что там в логин ляжет...
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (06.01.2013)
Старый 25.03.2012, 17:39   #33
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

C++/CLI - это язык для склеивания C++ native кода и .NET библиотек. Логику удобнее и быстрее реализовать либо в виде .net, либо С++ кода.
zergtmn вне форума   Ответить с цитированием
Старый 19.06.2012, 13:05   #34
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Возник вопрос как слинковать статистически MySql.Data.dll
(включить MySql.Data.dll в *.exe)

увы поиск как то не подсказывает(
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 19.06.2012, 16:37   #35
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Цитата:
Сообщение от partizanes Посмотреть сообщение
Возник вопрос как слинковать статистически MySql.Data.dll
(включить MySql.Data.dll в *.exe)

увы поиск как то не подсказывает(
никак
zergtmn вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (19.06.2012)
Старый 19.06.2012, 19:42   #36
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Качнуть сорцы можно и добавить в свой проэкт. Вроде можно и .NET сборку в exe как-то запихнуть
Зачем правда это я не понимаю.

Первые результаты поиска у гугле:
ILMerge
http://stackoverflow.com/questions/1...o-the-exe-file
http://stackoverflow.com/questions/2...other-assembly
http://stackoverflow.com/questions/1...led-executable

Последний раз редактировалось TOM_RUS; 19.06.2012 в 19:45.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (19.06.2012)
Старый 19.06.2012, 21:19   #37
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Все эти способы я видел,вопрос в том что они не стандартные ,кроме ILMerge.
(если честно я думал что это вообще делается 1 кликом мыши)
(поэтому поиск как бы не подсказывал простого решения)

по сути у меня получилось добавить в исполняемый файл длл с помощью vs, но сам ехе почему то его не видит.

на вопрос зачем,если конечно взять тот же framework то да смысл пихать огромное количество библиотек в ехе нет .
Когда же дело касается +256кб и не нужно человеку ставить коннектор ,мне кажется ответ очевиден.
В моем случае сам исполняемый файл спокойно скачивается на рабочий стол и там работает без лишних движений ,а вот зачем MySql.Data.dll еще рядом даже не знаю)

В любом случае спасибо за ответы и ваше мнение.
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 19.06.2012 в 21:25.
partizanes вне форума   Ответить с цитированием
Старый 19.06.2012, 21:49   #38
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Можно заинсталить сборку в GAC... Правда gacutil может не оказаться на клиентской машине...

И вообще проще заинсталить прогу куда нить в програм файлс, а на десктоп добавить ярлык...

Последний раз редактировалось TOM_RUS; 20.06.2012 в 05:09.
TOM_RUS вне форума   Ответить с цитированием
Старый 19.06.2012, 22:08   #39
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Тогда уже как мне кажется
Код:
String^ path = (Environment::SystemDirectory)+"//MySql.Data.dll";
Код:
 if (!File::Exists( path ) )	
{
       DownloadFile("http://www.site.com/MySql.Data.dll", ""+path);	
}
эххх ,а хотелось все так просто))
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 23.06.2012, 14:20   #40
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

//deleted
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 29.06.2012 в 16:37.
partizanes вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции HuntsMan Языки программирования 1 02.01.2012 12:57
Импортируемые функции Йоха Копаем клиент 3 08.12.2011 16:53
Вопрос по функции php lovepsone Языки программирования 38 07.12.2011 22:09
[11691][patch] Опечатка в функции выбора difficulty спелла PSZ Принятые патчи 1 28.06.2011 11:26
Overhead в базовой функции SendPacket() xex Отвергнутые патчи 19 26.03.2011 12:47


Текущее время: 05:05. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot