Перейти к публикации

Как читать переменные mom


Рекомендованные сообщения

Добрый день!

Возникла необходимость, чтобы через DLL'ку читать переменные mom (например mom_tool_name)

Написал библиотеку которая содержит функцию следующего содержания:

int User_start_of_program(void *client_data,void *interp,int argc,char **argv)

{

const char *val;

AnsiString Tool_name;

UF_MOM_id_t mom_id_tag;

mom_id_tag = ( UF_MOM_id_t )client_data;

UF_MOM_ask_string (mom_id_tag,"mom_tool_name", &val);

Tool_name=AnsiString(*val);

return 1;

}

В постпроцессоре (процедуре Start_of_path) ee вызываю. При выводе программы на пост, NX выдает следующую ошибку и вылетает:

post-16807-1241204242_thumb.jpg

Я думаю часть проблем в строчке, выделенной красным цветом, т.к. при ее отсутствии функция выполняется успешно.

Вопрос к знатокам С++: как правильно прочитать переменные такого плана, чтобы потом была возможность их использовать?

Использую NX4, библиотеку написал в C++Builder 6. Проблем с передацей информации в TCL интерпритатор нет.

З.Ы. Передавать mom переменные как параметры в функцию не хочется :)

Ссылка на сообщение
Поделиться на других сайтах


Какой-то "волк в овечьей шкуре"... Сначала спрашивал как писать постпроцессоры, а теперь про dll....

Ссылка на сообщение
Поделиться на других сайтах

Какой-то "волк в овечьей шкуре"... Сначала спрашивал как писать постпроцессоры, а теперь про dll....

я просто любознательный и люблю упрощать себе жизнь.

З.Ы. А я смотрю Вы всем прозвища придумываете, кто спрашивает много? :)

Ссылка на сообщение
Поделиться на других сайтах

Я думаю часть проблем в строчке, выделенной красным цветом, т.к. при ее отсутствии функция выполняется успешно.

Вообще, правильно:

Tool_name=AnsiString(val);

Хотя, скорее всего проблема возникает при обращении к переменной, а не при её преобразовании.

И зачем использовать тип AnsiString?

Проще надо, тот же char* чем плох?

Изменено пользователем harbel
Ссылка на сообщение
Поделиться на других сайтах

Добрый день!

Возникла необходимость, чтобы через DLL'ку читать переменные mom (например mom_tool_name)

Написал библиотеку которая содержит функцию следующего содержания:

int User_start_of_program(void *client_data,void *interp,int argc,char **argv)

{

const char *val;

AnsiString Tool_name;

UF_MOM_id_t mom_id_tag;

mom_id_tag = ( UF_MOM_id_t )client_data;

UF_MOM_ask_string (mom_id_tag,"mom_tool_name", &val);

Tool_name=AnsiString(*val);

return 1;

}

В постпроцессоре (процедуре Start_of_path) ee вызываю. При выводе программы на пост, NX выдает следующую ошибку и вылетает:

post-16807-1241204242_thumb.jpg

Я думаю часть проблем в строчке, выделенной красным цветом, т.к. при ее отсутствии функция выполняется успешно.

Вопрос к знатокам С++: как правильно прочитать переменные такого плана, чтобы потом была возможность их использовать?

Использую NX4, библиотеку написал в C++Builder 6. Проблем с передацей информации в TCL интерпритатор нет.

З.Ы. Передавать mom переменные как параметры в функцию не хочется :)

Я предполагаю что не надо использовать данную функцию

О причинах неоднократно писалось мной ранее

Используйте сертифицированние компиляторы соответствующих версий

Собирайте только в release варианте и пользуйтесь std::string

и не будет у Вас никаких проблем

Builder давно уже не является компилятором c++ (не соответствует текущим стандартам)

В программу добавте UF_free

Ссылка на сообщение
Поделиться на других сайтах
  • 5 месяцев спустя...

Добрый день!

Возникла необходимость, чтобы через DLL'ку читать переменные mom (например mom_tool_name)

Написал библиотеку которая содержит функцию следующего содержания:

int User_start_of_program(void *client_data,void *interp,int argc,char **argv)

{

const char *val;

AnsiString Tool_name;

UF_MOM_id_t mom_id_tag;

mom_id_tag = ( UF_MOM_id_t )client_data;

UF_MOM_ask_string (mom_id_tag,"mom_tool_name", &val);

Tool_name=AnsiString(*val);

return 1;

}

В постпроцессоре (процедуре Start_of_path) ee вызываю. При выводе программы на пост, NX выдает следующую ошибку и вылетает:

post-16807-1241204242_thumb.jpg

Я думаю часть проблем в строчке, выделенной красным цветом, т.к. при ее отсутствии функция выполняется успешно.

Если кому интересно, проблему решил!! Времени нехватало поковыряться...

Так вот проблема не в Tool_name=AnsiString(*val), а строке UF_MOM_ask_string (mom_id_tag,"mom_tool_name", &val)

Правильно нужно было написать UF_MOM_ask_string (mom_id_tag,"tool_name", &val). Приставка "mom" автоматически добавляется к имени переменной. А переменной "mom_mom_tool_name" не существует, поэтому и вылетала ошибка.

Ссылка на сообщение
Поделиться на других сайтах
  • 1 месяц спустя...

Может повторюсь, но ресурс <noindex>http://ugpost.narod.ru/</noindex> очень познавательный по данной теме.

Ссылка на сообщение
Поделиться на других сайтах
  • 6 лет спустя...

Всем доброго дня.

 

У меня похожая задача. Есть деталь, к ней набор оснастки. Нужно получить набор данных для передачи в другое ПО (Вертикаль). Оснастку получил и почти все необходимые параметры. Кроме одного. В отчёте wokrshop он значится как mom_tool_extension_lenght. Не нашел такого свойства в классе ToolBuilder, через который получаю остальные свойства. Может кто знает, что и где искать?

 

Нашёл вот такую функцию theUFSession.Mom.AskString(IntPtr mom_id, string var_name, out string var_val). Если я правильно понимаю, в моём случае var_name = "mom_tool_extension_lenght", var_val - то что я ищу. IntPtr mom_id - не могу понять что такое и от куда берется. Есть функция theUFSession.Mom.AskMom(string param, out IntPtr mom_id), но в ней не ясно что такое param, от куда он берётся.

 

Ещё в этой схеме мне не нравится следующий момент. В своей основной программе я работаю с theSession, перебираю оснастку с помощью массива NXOpen.CAM.NXGroup[], полученного из коллекции Part.CamSetup.CAMGroupCollection. Как theUFSession поймёт, что я сейчас работаю с конкретным экземпляром оснастки через theSession. Предполагаю, что никак. И результат будет соответствующий.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...