rjdgtn
 
 
  Зарегистрирован: 26.02.2009 Сообщения: 37
 
  | 
		
			
				 Добавлено: Чт 25 Мар 2010 00:28    Заголовок сообщения: SDK: **рятся указатели. | 
				     | 
			 
			
				
  | 
			 
			
				Версия ИнГЕО 4.5.
 
Краткое описание проблемы:
 
В ходе написания плагина под ИнГЕО заметил что значения переменных передаваемых в фунции ИнГЕО по указателю МЕНЯЮТСЯ в ходе выполнения программы. Данный факт проверен. Передача фейковых копий переменных вместо их самих решило проблему.
 
 
Код:
 
markerID
 
markerlayerID - глобальые переменные типа WideString (С++ Builder)
 
как видно из кода функции эти переменные в ходе выполнения функции не должны меняться, однако значение markerlayerID меняется уже к моменту выполнения оператора while.
 
 	  | Код: | 	 		  
 
void TMainForm::CreateObj(double x,double y)
 
{
 
if(!App->ActiveDb->StyleExists(markerID)){
 
        ShowMessage("Стиль с ID:\""+markerID+"\"не найден в текущей БД.");
 
                started=false;
 
                query=NULL;
 
                LabeledEdit1->ReadOnly=false;
 
                Button1->Caption="Поиск";
 
                Button4->Enabled=false;
 
                return ;
 
 
        }
 
if(!App->ActiveDb->LayerExists(markerlayerID)){
 
        ShowMessage("Слой с ID:\""+markerlayerID+"\"не найден в текущей БД.");
 
                started=false;
 
                query=NULL;
 
                LabeledEdit1->ReadOnly=false;
 
                Button1->Caption="Поиск";
 
                Button4->Enabled=false;
 
                return ;
 
                }
 
IIngeoMapObjectsQuery* Query;
 
App->ActiveDb->MapObjects->QueryByRect(Variant((wchar_t*)markerlayerID),x-1,y-1,x+1,y+1,false,&Query);
 
 
while(!Query->EOF_){
 
        IIngeoMapObject* tobj=App->ActiveDb->MapObjects->GetObjectA(Query->ObjectID);
 
        for (int i=0;i<tobj->Shapes->Count;i++)
 
              if((WideString)tobj->Shapes->get_Item(i)->StyleID==(WideString)markerID)
 
                        return ;
 
        Query->MoveNext();
 
 
}
 
 | 	 
  | 
			 
		  |