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();
}
|
|
|