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

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

6 часов назад, streamdown сказал:

Раз запускается, то уже не надо GetActiveObject.

Покажите код запуска процесса (Solidworks).

object processSw;
processSw = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID("F16137AD-8EE8-4D2A-8CAC-DFF5D1F67522
"));
  SwApp = (SldWorks)processSw;
  SwApp.Visible = true;
  SwApp.NewPart();
  swDoc = SwApp.IActiveDoc2;

 

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


Ну так у вас уже есть объект SW, зачем вы его ещё раз ГетОбжектите))

18 минут назад, mrazzzb сказал:

SwApp.NewPart();

Метод устаревший. Советую при новом API, и новой разработке, использовать именно новые методы. Иначе может "что-то" случиться, а вы и не поймёте почему. Могу долго про это рассказывать, так что просто примите совет.

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

Допустим открыл процесс SolidWorks программно, закрыл свое приложение , открываю заново и приложение уже не взаимодействует с Solidworks, как к нему обратиться заново? 

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, streamdown сказал:

 

Метод устаревший. Советую при новом API, и новой разработке, использовать именно новые методы. Иначе может "что-то" случиться, а вы и не поймёте почему. Могу долго про это рассказывать, так что просто примите совет.

 Да, вот как раз проблемы появились, поэтому начал рыть с самого начала. Спасибо за совет! Буду искать новый метод) 

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

@mrazzzb если вы изначально создавали объект Solidworks, то по завершении работы программы вы должны его уничтожить.

Лучшее, что можно придумать:

 

Цитата

 

swApp.ExitApp();

swApp = null;

System.Runtime.InteropServices.Marshal.ReleaseComObject(swApp);

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

 

 

Ну или убивать процесс, что в принципе равносильно "падению" Solidworks и не считается правильным.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, streamdown сказал:

если вы изначально создавали объект Solidworks, то по завершении работы программы вы должны его уничтожить.

Лучшее, что можно придумать

По мне так если приложение отображается, то его лучше не закрывать, потому как пользователь туда чего-нибудь может накидать для работы, а программа закроет все его труды без сохранения или наоборот насохраняет того чего не требовалось.

 

Поэтому может стоит подумать над работой программы в фоне без отображения или от пользователя перед работой программы затребовать запуска программы, что на уровне программы не думать над запуском и закрытием, а оставить эти задачи пользователю. Тем более что запуск данный программы процесс не мгновенный. По своему опыту просто не закрываю программу, а как с утра запустил так и висит, как понадобилась открыл окно, а файлы подгружаются и выгружаются по мере необходимости.

Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, Kelny сказал:

Поэтому может стоит подумать над работой программы

Вот с этим именно согласен. Надо никнейму ещё раз всё продумать. Либо открывать SW в фоне и не отображать, либо закрывать, либо оставить видимым и открытым.

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

@streamdown Подскажите пожалуйста есть ли пример какой-нибудь с новым методом запуска SolidWorks( с помощью guid желательно). Ищу в АПИ, ничего не могу найти :wallbash:

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

@mrazzzb вы меня не правильно поняли. Метод запуска SW не может быть другой, пока все не сменят технологию создания таких программ как SW.

Я вам говорил про создание детали NewPart() - её лучше не использовать.

Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, streamdown сказал:

@mrazzzb вы меня не правильно поняли. Метод запуска SW не может быть другой, пока все не сменят технологию создания таких программ как SW.

Я вам говорил про создание детали NewPart() - её лучше не использовать.

Понял, да я и  новый метод создания Part тоже не могу найти:g:

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

@streamdown

Скажите пожалуйста, вы не знаете как прописать формат сохранения файла при вызове диалогового окна "SaveAs", например ".sldprt". Для того чтобы пользователь не выбирал сам формат файла, а система уже сама выбрала определенный формат. Если можно так конечно))

swDoc.Extension.RunCommand((int)swCommands_e.swCommands_SaveAs, "SaveAs");

 

Ссылка на сообщение
Поделиться на других сайтах
56 минут назад, mrazzzb сказал:

RunCommand

это не нужно тут. Есть нормальная команда

SaveAs

Будет что-то вроде:

Цитата

int errors = 0;
int warnings = 0;
swModExt.SaveAs(FULL_PATH_FILENAME, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref errors, ref warnings);

 

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...
4 часа назад, streamdown сказал:

Да)))

Пробегаетесь по дереву на уровне элементов и потомков, если эскиз, то Is3D

Если бы я знал как пробежаться по дереву:rolleyes:, я поэтому и спросил))

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

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

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

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

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

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

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

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

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

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

    • Liga



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