Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разобраться с управляемым c++ / 11 сообщений из 11, страница 1 из 1
22.10.2004, 08:04
    #32749526
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Добрый день всем!
Создал веб службу на управлемом c++.
У меня в классе веб службы объявлен указатель
private:
OdbcCommand *inscomm;
который я инициалиализирую в методе этого класса
String __gc* grwebservice::connect()
{
...
inscomm=new OdbcCommand();
...
}.
В другом методе этого же класса я пытаюсь присвоить свойству CommandText
некую строку
String __gc* grwebservice::record()
{
...
...
...
StringBuilder *sbIns= new StringBuilder(S"insert into testgr(x,y) values(");
String *strIns;
sbIns->Append(x);
sbIns->Append(S",");
sbIns->Append(y);
sbIns->Append(S")");
strIns=sbIns->ToString ();
try
{

inscomm->CommandText =strIns;
...
...
...
}
catch(Exception *e)
{

return e->Message;

}

return S"ok!";

}.

Затем из программы клиента вызываю сначала метод connect() сервиса,
затем record(). При вызове record() выдаётся ошибка
object reference not set to an instance of an object.
Почему???
Ведь я же уже создал объект inscomm ранее в методе connect().
Когда же я помещаю inscomm=new OdbcCommand() и inscomm->CommandText =strIns в одном методе ошибки не выдаётся.
Прочитал в книге про сборщик мусора, это его работа или нет?
Как же мне сделать чтобы объявленные в классе указатели инициализировать
в одном методе, а использовать их в другом?
Заранее большое спасибо!!!
...
Рейтинг: 0 / 0
22.10.2004, 10:14
    #32749710
Siebentearbeit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
В сабже надо писать Net

А где именно выдаёт ошибку?

Такое чувство, что некое entity создаётся внутри connect, а потом в record ты его пытаешься использовать, а оно дохнет при выходе из connect
...
Рейтинг: 0 / 0
22.10.2004, 11:07
    #32749853
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Да, в connect() я создаю
inscomm=new OdbcCommand();
Но почему inscomm дохнет если inscomm переменная класса а не локальная
переменная процедуры и метод record() объект того же класса? Сам экземпляр класса что ли сдох?
Тут (в управляемом c++) надо что ли переменные класса в каждом методе
по-новому (new ...) создавать?
Заранее большое спасибо!
...
Рейтинг: 0 / 0
22.10.2004, 16:58
    #32751037
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
pokaji kod gde ti iuzaesi tip grwebservice,
takoe ciuvstvo kakbudto ti iuzaesi raznie peremennie ..., toesti oblasti pameti.
...
Рейтинг: 0 / 0
27.10.2004, 13:38
    #32756971
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Отвечаю сам себе.
Надо было переменные класса объявить как static.
...
Рейтинг: 0 / 0
27.10.2004, 22:31
    #32758113
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
ДжекОтвечаю сам себе.
Надо было переменные класса объявить как static.
ti vidno ne prociol to cito ia napisal: ti iuzaesi dve raznie peremennie, poetomu u tebea i teriaiutsea dannie ....
...
Рейтинг: 0 / 0
28.10.2004, 07:23
    #32758244
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Уважаемый zuzu!
Спасибо за ответ.
То что я ответил сам себе (про static) это неправильно, так как я вспомнил, что статические переменные для всех экземпляров класса одни и те же.
Т.е. если первый клиент запустит этот сервер с одними значениями этих переменных, а потом второй клиент запустит этот же сервер с другими значениями этих переменных, то у первого клиента значения этих переменных должны измениться на значения, которые установил второй клиент.Это не подходит.Я ещё забыл написать, что grwebservice это у меня класс веб службы,
которая развёрнута на другой машине.Вот его объявление:
...
...
...
namespace mwgs
{
public __gc
class grwebservice : public WebService
{

private:


public:
// WEB SERVICE EXAMPLE
// The HelloWorld() example service returns the string "Hello, World!".
// To test this web service, ensure that the .asmx file in the deployment path is
// set as your Debug HTTP URL, in project properties.
// and press F5.
OdbcConnection *conn ;
OdbcCommand *comm;
OdbcCommand *inscomm;
OdbcDataAdapter *da ;


grwebservice()
{
}


[System::Web::Services::WebMethod]
String __gc* HelloWorld();
[System::Web::Services::WebMethod]
String* connect(String *dsn, String *sql);
[System::Web::Services::WebMethod]
String* record(double x,double y);


// TODO: Add the methods of your Web Service here

};
}

Вот код клиента где я юзаю тип grwebservice:
...
...
...
grwebservice::Cgrwebservice gs;
HRESULT hr;
CComBSTR bsDSN("DSN=MyDSN"),bsSQL("Select * from MyTable"), bsOut;
hr=gs.SetUrl ("http://ip адрес/вирт. каталог/mwgs.asmx");

hr=gs.connect(bsDSN,bsSQL,&bsOut);
hr=gs.record (1,2,&bsOut);
...
...
...
На вызове gs.record (1,2,&bsOut) в bsOut возвращается ошибка
object reference not set to an instance of an object.
Как видишь и при вызове connect и при вызове record используется один и тот же объект gs.
Клиент у меня написан на неуправляемом c++.
Что же делать?
Заранее большое спасибо за ответ!!!
...
Рейтинг: 0 / 0
28.10.2004, 11:09
    #32758615
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
pokaji kod gde ti initializiruesi bsOut i kod gde iuzaesi ego ...
toesti kuski iz etih funktii:
hr=gs.connect(bsDSN,bsSQL,&bsOut);
hr=gs.record (1,2,&bsOut);
...
Рейтинг: 0 / 0
28.10.2004, 11:23
    #32758651
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Вот эти функции:
String* grwebservice::connect(String *dsn, String *sql)
{

// TODO: Add the implementation of your Web Service here

try
{

conn = new OdbcConnection(dsn);
conn->Open();
comm = new OdbcCommand(sql,conn);
da = new OdbcDataAdapter(comm);
inscomm=new OdbcCommand(S"",conn);
}
catch(Exception *e)
{

return e->Message;

}

return S"ok!";
}
String* grwebservice::record(double __gc *x,double __gc *y,int size)
{

StringBuilder *sbIns= new StringBuilder(S"insert into maytable(x,y) values(");
StringBuilder *sbIns= new StringBuilder(S"");
String *strIns;
sbIns->Append(x);
sbIns->Append(S",");
sbIns->Append(y);
sbIns->Append(S")");
strIns=sbIns->ToString ();
try
{

inscomm->CommandText =strIns;
da->InsertCommand=inscomm;
da->InsertCommand->ExecuteNonQuery ();
}
catch(Exception *e)
{

return e->Message;

}
}
return S"ok!";

}
...
Рейтинг: 0 / 0
28.10.2004, 13:39
    #32759123
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
1. ::connect
nado provereati rezulitat vipolnenia komand:
cpp
conn = new OdbcConnection(dsn);
conn->Open();
comm = new OdbcCommand(sql,conn);
da = new OdbcDataAdapter(comm);
inscomm=new OdbcCommand(S"",conn);

toesti citoto tipa: (tak kak eto u tebea peremennie dlia posleduiuscego ispolizovania)
cpp
conn = new OdbcConnection(dsn);
if (!conn) return S"Error OdbcConnection";

vopros: dlia cego peredaiosi v functiu record tretii parametr, tembolee cito peredaiosi adres, a potom ne iuzaesi ego voobsce.

1.proverki sdelai i v functii record i v slucae osibki verni mesagu osibki.
2.proveri cito vernula tebe functia connect pered tem kak zapustiti functiu record.
tak kak u tebea mojet i bil kakoito exception, no ti ego otlovil i otoslal rezulitat osibki, dalee ne provereaia rezulitata zapuskaesi record.
...
Рейтинг: 0 / 0
28.10.2004, 14:05
    #32759222
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с управляемым c++
Я не тот код функции record послал, на самом деле он вот какой:
String* grwebservice::record(double x,double y)
{

StringBuilder *sbIns= new StringBuilder(S"insert into maytable(x,y) values(");
StringBuilder *sbIns= new StringBuilder(S"");
String *strIns;
sbIns->Append(x);
sbIns->Append(S",");
sbIns->Append(y);
sbIns->Append(S")");
strIns=sbIns->ToString ();
try
{

inscomm->CommandText =strIns;
da->InsertCommand=inscomm;
da->InsertCommand->ExecuteNonQuery ();
}
catch(Exception *e)
{

return e->Message;

}
}
return S"ok!";

}

C вызовом
conn = new OdbcConnection(dsn);
проблем нет, ошибка не возвращается.
Тут дело не в соединении с базой, а вообще любая переменная класса
ранее созданная в одной функции, не видна из другой функции вызванной позже.
Я не знаю что это такое так как только недавно перешёл на управляемый c++,
в неуправляемом же c++ такого не было.
Тогда можеть знаешь как мне передать массив значений из неуправляемого кода клиента в функцию веб сервиса на управляемом коде?
Потому что если каждый раз вызывать conn = new OdbcConnection(dsn) мне кажется будет очень долго работать.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разобраться с управляемым c++ / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]