Как возвратить значение LPTSTR main(void)
От: Vodolaz  
Дата: 29.08.03 08:07
Оценка:
Есть код который возвращает некоторое значение:
#include <windows.h>
#define BUFSIZE 1024

LPTSTR main(void)
{
    LPTSTR lpszValue; 
    ....
    ....
    return lpszOldValue;
}

Эта программка возвращает значение LPTSTR, когда я получаю это значение у меня совсем не строка, как передать строку?
Re: Как возвратить значение LPTSTR main(void)
От: Alexmoon Украина  
Дата: 29.08.03 08:31
Оценка:
Здравствуйте, Vodolaz, Вы писали:

V>Есть код который возвращает некоторое значение:

V>
V>#include <windows.h>
V>#define BUFSIZE 1024

V>LPTSTR main(void)
V>{
V>    LPTSTR lpszValue; 
V>    ....
V>    ....
V>    return lpszOldValue;
V>}
V>

V>Эта программка возвращает значение LPTSTR, когда я получаю это значение у меня совсем не строка, как передать строку?

ты возвращаешь не строку а указатель. А уж на что он указывает — это уже из области видимости.
Попробовать конечно нужно, но таким образом вернуть локальную строку можно только при наличии у объекта контруктора с параметром возвращаеиого указателя.
Обычно это делают передачей указателя на буффер над которым и производятся преобразования, но внутри обязательно делают временный и если преобразования во временном прошли успешно, то делают копирование во внешний буффер.
Re: Как возвратить значение LPTSTR main(void)
От: Другой Аноним  
Дата: 29.08.03 08:39
Оценка:
Здравствуйте, Vodolaz, Вы писали:

V>Есть код который возвращает некоторое значение:

V>
V>#include <windows.h>
V>#define BUFSIZE 1024

V>LPTSTR main(void)
V>...
V>


Это невозможно. Функция main должна возвращать int и только int.
Re[2]: Как возвратить значение LPTSTR main(void)
От: Vodolaz  
Дата: 29.08.03 08:42
Оценка:
Здравствуйте, Alexmoon, Вы писали:

A>ты возвращаешь не строку а указатель. А уж на что он указывает — это уже из области видимости.

A>Попробовать конечно нужно, но таким образом вернуть локальную строку можно только при наличии у объекта контруктора с параметром возвращаеиого указателя.
A>Обычно это делают передачей указателя на буффер над которым и производятся преобразования, но внутри обязательно делают временный и если преобразования во временном прошли успешно, то делают копирование во внешний буффер.

А можно поподробней, как же все таки передать строку?
Re[2]: Как возвратить значение LPTSTR main(void)
От: Vodolaz  
Дата: 29.08.03 08:43
Оценка:
Здравствуйте, Другой Аноним, Вы писали:

ДА>Это невозможно. Функция main должна возвращать int и только int.

И как можно передать строку, только через файл?
Re[3]: Как возвратить значение LPTSTR main(void)
От: Alexmoon Украина  
Дата: 29.08.03 10:35
Оценка: -1
Здравствуйте, Vodolaz, Вы писали:

V>Здравствуйте, Alexmoon, Вы писали:


A>>ты возвращаешь не строку а указатель. А уж на что он указывает — это уже из области видимости.

A>>Попробовать конечно нужно, но таким образом вернуть локальную строку можно только при наличии у объекта контруктора с параметром возвращаеиого указателя.
A>>Обычно это делают передачей указателя на буффер над которым и производятся преобразования, но внутри обязательно делают временный и если преобразования во временном прошли успешно, то делают копирование во внешний буффер.

V>А можно поподробней, как же все таки передать строку?


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

class A
{
   LPTSTR tstr;
public:
   A(LPTSTR lpstr)
      {
          tstr = new TSTR[tcslen(lpstr)+1];
          tcscpy(lptstr, tstr);
      };
   ~A() { delete tstr; };

   GetBuffer(LPTSTR tsstr) {tcspy(tsstr, tstr);};
};

LPTSTR function(LPTSTR lptstr)
{
    TSTR str[255];
    _tcscpy(lptstr, str);
    //преобразования str
    _tcscpy(str, lptstr);
    return str;
}

void main (void)
{
    TSTR lpsz[255];
    A a = function(lpsz);
    //по идее объект a и lpsz должны содержать копии буфферов
}


могут быть и ошибки. С объектом не проверял, но по логике вещей должно работать.
Извини спешу.
Re: Как возвратить значение LPTSTR main(void)
От: LaptevVV Россия  
Дата: 29.08.03 10:50
Оценка:
Здравствуйте, Vodolaz, Вы писали:

V>Есть код который возвращает некоторое значение:

V>
V>#include <windows.h>
V>#define BUFSIZE 1024

V>LPTSTR main(void)
V>{
V>    LPTSTR lpszValue; 
V>    ....
V>    ....
V>    return lpszOldValue;
V>}
V>

V>Эта программка возвращает значение LPTSTR, когда я получаю это значение у меня совсем не строка, как передать строку?

Нарушены сразу ДВА стандарта: С и С++
по стандарту функция main может возвратить ТОЛЬКО int. Это значение можно проверить, например в командном файле, чтобы решить, что делать. Строки главная функция возвращать не умеет. Тем более, что возвращается не строка а указатель.
Единственный легальный способ — вывести строку в файл и оттуда уже ее проверять.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Как возвратить значение LPTSTR main(void)
От: Другой Аноним  
Дата: 29.08.03 10:54
Оценка:
Здравствуйте, Vodolaz, Вы писали:

ДА>>Это невозможно. Функция main должна возвращать int и только int.

V>И как можно передать строку, только через файл?

Во-первых, нужно понять: кому передать, в каком контексте?
Re[4]: Как возвратить значение LPTSTR main(void)
От: Vodolaz  
Дата: 29.08.03 11:08
Оценка:
ДА>Во-первых, нужно понять: кому передать, в каком контексте?

Забираю так

wsh=createobject("WScript.Shell");
retVal=wsh.run(Путь,0,1);
Re[5]: Как возвратить значение LPTSTR main(void)
От: Другой Аноним  
Дата: 29.08.03 11:13
Оценка:
Здравствуйте, Vodolaz, Вы писали:

V>
V>wsh=createobject("WScript.Shell");
V>retVal=wsh.run(Путь,0,1);
V>


Читаем справку: "The Run method returns an integer."

Однако ведь retVal не является конечным предназначением этих данных, не так ли? Если б знать куда эти данные должны потом попасть, можно было бы попробовать предложить другой способ.
Re[4]: Как возвратить значение LPTSTR main(void)
От: PM  
Дата: 29.08.03 11:16
Оценка: :)
Здраствуйте, Alexmoon. Вы писали:

A> может с классом и не пройдет, но просто так никогда не делал, но думаю,

A> что проблем быть не должно.
A>
A>
 A> class A
 A> {
 A>    LPTSTR tstr;
 A> public:
 A>    A(LPTSTR lpstr)
 A>       {
 A>           tstr = new TSTR[tcslen(lpstr)+1];
 A>           tcscpy(lptstr, tstr);
 A>       };
 A>    ~A() { delete tstr; };
 A> 
 A>    GetBuffer(LPTSTR tsstr) {tcspy(tsstr, tstr);};
 A> };
 A> 
 A> LPTSTR function(LPTSTR lptstr)
 A> {
 A>     TSTR str[255];
 A>     _tcscpy(lptstr, str);
 A>     //преобразования str
 A>     _tcscpy(str, lptstr);
 A>     return str;
 A> }
 A> 
 A> void main (void)
 A> {
 A>     TSTR lpsz[255];
 A>     A a = function(lpsz);
 A>     //по идее объект a и lpsz должны содержать копии буфферов
 A> }
 A>

A>
A> могут быть и ошибки. С объектом не проверял, но по логике вещей должно
A> работать. Извини спешу.

При выходе из main благополучно умирают как объект a, так и массив lpsz
Posted via RSDN NNTP Server 1.7 beta
Re[5]: Как возвратить значение LPTSTR main(void)
От: Alexmoon Украина  
Дата: 29.08.03 11:40
Оценка:
Здравствуйте, PM, Вы писали:

PM>Здраствуйте, Alexmoon. Вы писали:


PM>При выходе из main благополучно умирают как объект a, так и массив lpsz

это я думаю и так всем понятно
я думал что суть вопроса состоит в возврате временного буффера, а не сохранения результатов работы после выхода из main.
тогда все в файл. Тут все уже очень зависит от конкретной задачи. и зачем? приведи пример такой необходимости.
Re[6]: Как возвратить значение LPTSTR main(void)
От: PM  
Дата: 29.08.03 14:46
Оценка:
Здравствуйте, Alexmoon, Вы писали:

PM>>При выходе из main благополучно умирают как объект a, так и массив lpsz

A>это я думаю и так всем понятно
A>я думал что суть вопроса состоит в возврате временного буффера, а не сохранения результатов работы после выхода из main.
A>тогда все в файл. Тут все уже очень зависит от конкретной задачи. и зачем? приведи пример такой необходимости.
Вопрос не ко мне, я не могу придумать, зачем такое нужно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.