Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Получение результата как аргумента, передаваемого по ссылке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти ошибки и исправить http://www.cyberforum.ru/cpp-beginners/thread665338.html
Помогите найти ошибки. #include<stdio.h> #include<conio.h> int main(void) { int *a, b; float *x, y = 3.5; double *m, n; clrscr(); printf(" Enter b = ");
C++ 2d графика Здравствуйте! Имеется рабочий код игры (packman) написанный мной недавно. Нужно его оформить 2d графикой, подскажите пожалуйста чем лучше пользоваться http://www.cyberforum.ru/cpp-beginners/thread665334.html
C++ Определить, что больше: максимальный элемент массива А[10] или минимальный элемент массива В[7]
Определить, что больше: максимальный элемент массива А или минимальный элемент массива В. Поставить максимальный элемент из них на место 1-ого отрицательного элемента массива С. помогите поправить...
C++ Дана последовательность целых чисел а1, а2, …, an. Выяснить, является ли она симметричной последовательностью простых чисел
Ребят срочно надо><
C++ запуск программы в gdb - debugger http://www.cyberforum.ru/cpp-beginners/thread665298.html
Доброго времени суток, появилась необходимость диззасемблировать функцию одну #include "stdafx.h" #include "conio.h" void lame (void) { char small; gets (small); printf("%s\n", small); } int...
C++ Программа на вычисление бесконечной суммы Помогите сделать программу на вычесление бесконечной суммы с заданной точностью, используя рекуррентные зависимости. Формула дана в таком виде:... подробнее

Показать сообщение отдельно
Sweet_Sleep
10 / 10 / 0
Регистрация: 04.11.2009
Сообщений: 147
19.10.2012, 13:19  [ТС]
Думаю можно задать вопрос в этой же теме) Задача та же самая...Передача значения по ссылке. Только теперь через rpc. Sun-rpc. есть код клиента, который непосредственно вызывает модуль, функция на клиенте отсылает данные серверу, сервер выполняет функцию, используя заранее заготовленный модуль и дальше по цепочке все посылают обратно данные.

такой вызов:
C++
1
2
int val=0;
us.existenceLogin("lofdgsdfg",val);
код клиента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Функция для проверки существования логина, значение надо вернуть в value
Code::Type US::existenceLogin (std::string login, int& value){
         //тут у нас происходит передача аргументов в структуру для серверной функции
      existenceParameters existence;
      strcpy(existence.login, login.c_str());      
      existence.value[1]=value;  /*в интерфейсной части для rpc прописана следующая структура
 struct existenceParameters{
  char login[32];
  int value[1];
};*/
 
      unsigned int result;
      result=*(existencelogin_1(&existence, client)); //возвращаем результат
 
      return (Code::Type)result;
};
код сервера:
C++
1
2
3
4
5
6
7
8
9
10
/* This function verify login and return 1=if login non existence, 0=if login existence */
int* existencelogin_1_svc (existenceParameters *argp, struct svc_req *rqstp)
{
     US us; //тут мы создаем экземпляр класса, описанный в подключаемом модуле
     std::string login(argp->login);
printf("server1=%d\n", *argp->value); //это для проверки, что данные до и после функции не изменились
     static int result = (int)us.existenceLogin(login,argp->value[1]); //передача данных непосредственно в функцию, где что-то делается
printf("server2=%d\n", *argp->value);
     return (&result);  //возвращаем результат
};]
Модуль, где присваивается значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Code::Type US::existenceLogin (std::string login, int& value){
//!!!Передача второго аргумента идет по ссылке, как и на клиенте
  if (mysql_ping(&mysql)<=0){        //Build query if connect with DB:
    std::string str_query="SELECT * FROM "+USnamedb+"."+UStable+" WHERE "+UStable+".login= '"+login+"'";
    char* query = new char[str_query.size()+1];
    strcpy(query, str_query.c_str());
                                           //Execute query, if !=0=> we have error:
    if (mysql_query(&mysql, query)!=0){
      Log::error("Error execute require\n");
      return(Code::US_QueryError);                  //Hear must be code error!
    };
                                         //Save result query and check result:
    mysql_res=mysql_use_result(&mysql);
    mysql_row=mysql_fetch_row(mysql_res);
                                          //Save result and return and make empty memory:
    if(mysql_row==NULL) value=1; else value=0;  //!!!Вот оно, присваивание результата
    delete[] query;
    mysql_free_result(mysql_res);
                                          //If didn't connect with database:
  }else{
    Log::error("Impossible execute require: error connect with database\n");
    return(Code::US_DBDoesntRespond);                          //Hear must be code error!
  };
  return(Code::Okay);
};
Чуть вопрос не забыла) = Как это сделать?) Приведенный вариант не отрабатывает..

Добавлено через 16 минут
Ошибочка вышла, в серверной части значение как раз таки сохраняется. То есть после выполнение функции Sever2 = нужному значению,а вот уже на клиенте ничего нет.

Добавлено через 12 часов 56 минут
Уже не надо, разобралась)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru