Кто-нибудь умеет возвращать массив из метода класса, описанного в dlm?
0 (0)
Кто-нибудь умеет возвращать массив из метода класса, описанного в dlm? ( sdo 23.04.2016 18:29 )
5(1)Из простой функции я делал, работает.
А вот из метода класса где-то падает уже после показа MessageBox
RSL_METHOD_DECL(getAllvalues) { ValueClear (retVal); MessageBox(0,"qq","ValueClear",0); ValueSet(retVal,V_GENOBJ,this->ar); MessageBox(0,"qq","ReturnVal",0); return 0; }
Если вертать скалярную величину - все хорошо. А вот массив не хочет. Сам массив нормальный, проверял взятием количества элементов.
>> ОтветитьКусок из assarray ( tema 24.04.2016 06:58 )
5(1)RSL_GETPROP_DECL(GetKeyArray) { TGenObject * a=RslTArrayCreate (mapHash.size(),1); int indexElement=0; for (std::map <std::string,std::string> :: iterator iter = mapHash.begin(); iter != mapHash.end(); ++iter) { VALUE * pArrayElement=PushValue(NULL); ValueSet (pArrayElement,V_STRING,(void *)iter->first.c_str()); RslTArrayPut(a, indexElement++, pArrayElement); PopValue(); } ValueSet (retVal,V_GENOBJ,(void *)a); return 0; }
>> ОтветитьСпасибо, работает! Сделал копирование из моего массива в созданный внутри метода ( sdo 24.04.2016 17:05 )
5(1)Непонятно, чем ему объявленный в классе не нравится.
Возможно это как-то связано со счетчиком ссылок, но экспериментировать дальше практического смысла не вижу.
>> Ответить"объявленный в классе" это в RSL и переданный как параметр? ( tema 25.04.2016 10:33 )
5(1)Куски кода работающие как предыдущий пример
RSL_METHOD_DECL(GetArray) { VALUE *vaKey =NULL; TGenObject *objKey =NULL; int indexElement=0; int v; if (GetParm (1,&vaKey ) && vaKey->v_type == V_GENOBJ ) objKey = RslIsTArray((TGenObject *) vaKey->value.obj); for (std::map <std::string,std::string> :: iterator iter = mapHash.begin(); iter != mapHash.end(); ++iter) { if (objKey!=NULL) { VALUE * pArrayElement=PushValue(NULL); ValueSet (pArrayElement,V_STRING,(void *)iter->first.c_str()); RslTArrayPut(objKey, indexElement, pArrayElement); PopValue(); } indexElement++; } }
>> Ответитьнет, массив- это член класса. Заполняется методом value("") = , а вот возврат чудит. ( sdo 26.04.2016 16:30 )
5(1)class dvnQps{ protected: public: TGenObject *ar; dvnQps(TGenObject *pThis = NULL){ this->ar = RslTArrayCreate (20,10); } ~dvnQps(){ RELEASE (this->ar); } ... }; RSL_CLASS_BEGIN(dvnQps) RSL_INIT RSL_PROP_METH2 (value) RSL_METH (getAllvalues) RSL_METH (clearValues) RSL_CLASS_END
>> Ответить
Попробуй вставить ADDFEF(this->ar) (-) ( григ 30.05.2016 10:06 )
5(1)Not specified
>> Ответить