|
|
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Создал веб службу на управлемом 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 в одном методе ошибки не выдаётся. Прочитал в книге про сборщик мусора, это его работа или нет? Как же мне сделать чтобы объявленные в классе указатели инициализировать в одном методе, а использовать их в другом? Заранее большое спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 08:04 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
В сабже надо писать Net А где именно выдаёт ошибку? Такое чувство, что некое entity создаётся внутри connect, а потом в record ты его пытаешься использовать, а оно дохнет при выходе из connect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 10:14 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Да, в connect() я создаю inscomm=new OdbcCommand(); Но почему inscomm дохнет если inscomm переменная класса а не локальная переменная процедуры и метод record() объект того же класса? Сам экземпляр класса что ли сдох? Тут (в управляемом c++) надо что ли переменные класса в каждом методе по-новому (new ...) создавать? Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 11:07 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
pokaji kod gde ti iuzaesi tip grwebservice, takoe ciuvstvo kakbudto ti iuzaesi raznie peremennie ..., toesti oblasti pameti. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:58 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Отвечаю сам себе. Надо было переменные класса объявить как static. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 13:38 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
ДжекОтвечаю сам себе. Надо было переменные класса объявить как static. ti vidno ne prociol to cito ia napisal: ti iuzaesi dve raznie peremennie, poetomu u tebea i teriaiutsea dannie .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 22:31 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Уважаемый 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++. Что же делать? Заранее большое спасибо за ответ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 07:23 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
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); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 11:09 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Вот эти функции: 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!"; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 11:23 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 13:39 |
|
||
|
Помогите разобраться с управляемым c++
|
|||
|---|---|---|---|
|
#18+
Я не тот код функции 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) мне кажется будет очень долго работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 14:05 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32756971&tid=2034181]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 339ms |

| 0 / 0 |
