-PUBLISH через acedCommandC или acedCommandS в 2015

Автор Тема: -PUBLISH через acedCommandC или acedCommandS в 2015  (Прочитано 20087 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Добрый день,
Продолжаю мигрироватся на 2015.
Процедура должна выполнятся из модального окна синхронно.
acedCommand не осталось, заменили на acedCommandC и на acedCommandS.
acedCommandC - вызывается после завершения процедуры, так не подходит.
acedCommandS - возврасиает ошибку 22, ERR_BAD_COMMAND., по логике как раз acedCommandS подходит.
Есть подозрение что чего-то не так с названием фаила, но в консоли не видно как название передалось.
Пробовал и в кавычках (одинарных и двоиных и без них) и с двоиными '\'.

Может есть еще какие-то моменты?

Код - C++ [Выбрать]
  1. struct resbuf vl_old,vl_new;
  2.         vl_new.restype = RTSHORT;
  3.         vl_old.restype = RTSHORT;
  4.         acedGetVar(_T("SDI"),&vl_old);
  5.         int val = vl_old.resval.rint;
  6.         vl_new.resval.rint = 0;
  7.         acedSetVar(_T("SDI"),&vl_new);
  8.         acedSetVar(_T("backgroundplot"),&vl_new);
  9.         acedSetVar(_T("filedia"),&vl_new);
  10.         this->BeginEditorCommand();
  11.         acedCommand(RTSTR,_T("-publish"),RTSTR,file,RTNONE); //file - c:\\test.dsd
  12.         //acedCommandC(NULL,NULL,RTSTR,_T("-publish"),RTSTR,file,RTNONE);
  13.         //acedCommandS(RTSTR,_T("-publish"),RTSTR,file,RTNONE);
  14.         this->CompleteEditorCommand();
  15.         vl_new.resval.rint = 1;
  16.         acedSetVar(_T("filedia"),&vl_new);
  17.         acedSetVar(_T("SDI"),&vl_old);
  18.  
« Последнее редактирование: 16-07-2014, 17:24:20 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #1 : 16-07-2014, 17:43:13 »
1) Версия AutoCAD английская? Если нет, то правильнее не _T("-publish"), а _T("_-publish")
2) Попробуй заменить в имени файла все _T('\\') на _T('/')
3) Включи на время теста системную переменную CMDECHO - она позволит посмотреть запросы командной строки.
4) Так как команде передаются все параметры за один раз, то похоже, что тебя устроит вариант acedCommandS
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #2 : 17-07-2014, 09:22:00 »
1.Версия англицкая
2.попробовал, ничего не поменялось
3.CMDECHO на 1, но в том то и дело что выводится только -publish, а какой параметр, т.е. какой фаил подаётся невидно. Создается впечатление что он вообще не подается
4.попробовал acedCmdS, тоже самое

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #3 : 17-07-2014, 10:05:35 »
Попробуй не из диалогового окна работает ли acedCommandS(RTSTR,_T("_-publish"),RTSTR,file,RTNONE);
Если работает, то подготовь проект, в котором диалоговое окно с кнопкой, которая вызывает этот код - отправлю в ADN DevHelp
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #4 : 17-07-2014, 11:16:25 »
В процессе создания проекта выяснилось.
errno - 22, где то раньше устанавливался и к етому участку кода отношения не имел.
Сейчас возврасяется 0, но это все равно никак не работает PUBLISH не запускается. Т.е. ни из окна, ни через команду.
Собрал проект с разными вариантами выполнения, ни 1 не работает.

p.s. Для проверки использовал DSD созданный ACAD.
« Последнее редактирование: 17-07-2014, 11:28:46 от begiz »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #5 : 17-07-2014, 12:13:18 »
Я потестировал немного. Результат - acedCommandS с командой -PUBLISH не работает, а acedCommandC работает, но команда запускается только после закрытия диалогового окна. Отправлю сегодня запрос в ADN DevHelp.
Хотел уточнить - в предыдущих версиях AutoCAD у тебя этот код работал (с учетом acedCommand)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #6 : 17-07-2014, 13:13:04 »
Код в пригинале был такой, почему не помню:
acedCommand(RTSTR,_T("-publish"),RTNONE);
acedCommand(RTSTR,_T("c:\\test.dsd"),RTNONE);

Он работает в 2004,2006,2007,2012;

Поменял на этот, потому что исходя из документации синхронный вызов долзен быть сразу со всеми параметрами.
acedCommand(RTSTR,_T("-publish"),RTSTR,_T("c:\\test.dsd"),RTNONE);

Для проверки сделал также и в 2012, всё работает как и в первом случае.
А с acedCommandS ни 1 из вариантов не работает.


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #7 : 17-07-2014, 13:55:15 »
Понятно. Отправил запрос в ADN DevHelp. Когда появится информация - сообщу. Могу предположить что это баг и возможно понадобится выполнять PUBLISH другим способом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #8 : 17-07-2014, 15:13:41 »
Пока будем ждать ответа из ADN DevHelp попробуй такой код вместо -PUBLISH:
Код - C++ [Выбрать]
  1.         AcPlDSDData dsdDataObj;                        
  2.         dsdDataObj.readDSD(_T("C:\\test.dsd")); // Читаем dsd-файл
  3.         AcPlPlotConfig* pConfig = NULL;        
  4.         // Устанавливаем текущую конфигурацию печати
  5.         // Возможно потребуются дополнительные настройки
  6.         acplPlotConfigManager->getCurrentConfig(pConfig);
  7.         bool bShowPlotProgress = true;
  8.         // Запускаем публикацию
  9.         acplPublishExecute( dsdDataObj, pConfig, bShowPlotProgress );
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #9 : 17-07-2014, 15:37:10 »
"acplmisc.h" добавил.
не нахожу какой .lib добавить, без него линкер ругается,  что acplPublishExecute не определен

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #10 : 17-07-2014, 16:11:29 »
AcPublish_crx.lib для AutoCAD 2013...2015 и AcPublish.lib для версий до AutoCAD 2012 включительно

Проще всего в stdafx.h добавить строки:
Код - C++ [Выбрать]
  1. #include "acplmisc.h"
  2. #pragma comment(lib,"AcPublish_crx.lib")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 156
  • Карма: 8
  • Skype: begiz_i
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #11 : 17-07-2014, 16:59:15 »
Ну уже явно лучше!!! :D
ACAD пытается печатать, правда заставляет выбрать место и название DWF, хотя ето в DSD указано.
Пробовал установить setPlotToFile, но получаю eNotApplicable.

Это если вызываю из модального окна.
А если просто так, то на acplPlotConfigManager->getCurrentConfig(pConfig) вылетает, перед етим возвращая eNullPtr = 506  :-\

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #12 : 17-07-2014, 17:23:47 »
Это если вызываю из модального окна.
А если просто так, то на acplPlotConfigManager->getCurrentConfig(pConfig) вылетает, перед етим возвращая eNullPtr = 506
Можно эту строку вообще убрать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #13 : 18-07-2014, 01:52:51 »
ACAD пытается печатать, правда заставляет выбрать место и название DWF, хотя ето в DSD указано.
Есть как минимум один вариант - использовать Win32 Hook для автоматического нажатия кнопки Да (OK) в момент появления диалога запроса имени файла. Я попросил ADN DevHelp уточнить есть ли еще варианты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: -PUBLISH через acedCommandC или acedCommandS в 2015
« Ответ #14 : 18-07-2014, 12:14:26 »
А это метод с использованием Win32 Hook:

Код - C++ [Выбрать]
  1. //////////////////////////////////////////////////////////////////////////
  2. //            Класс для автоматического нажатия кнопки Да (OK)
  3. //////////////////////////////////////////////////////////////////////////
  4. class HelpHook {
  5. public:
  6.   HelpHook ()
  7.   {
  8.     hMsgBoxHook = SetWindowsHookEx(WH_CBT,&HelpHook::CBTProc,_hdllInstance,0); 
  9.   }
  10.   ~HelpHook()  
  11.   {
  12.     UnhookWindowsHookEx(hMsgBoxHook); hMsgBoxHook = 0;
  13.   }
  14. private:
  15.   static LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
  16.   {
  17.     HWND hwnd, hwndButton;
  18.     if (nCode == HCBT_ACTIVATE) {
  19.       hwnd = (HWND)wParam; hwndButton = GetDlgItem(hwnd, IDOK);
  20.       if (hwndButton) {
  21.         SendMessage(hwndButton,BM_CLICK,0,0);
  22.       }
  23.     }
  24.     return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
  25.   }
  26.   static HHOOK hMsgBoxHook;
  27. };
  28.  
  29. HHOOK HelpHook::hMsgBoxHook = 0;
  30.  
  31. void DLGTestCommand::OnBnClickedPublishe()
  32. {
  33.   AcPlDSDData dsdDataObj;                      
  34.   dsdDataObj.readDSD(_T("C:\\test.dsd")); // Читаем dsd-файл
  35.   DeleteFile(dsdDataObj.destinationName()); // Удаляем файл предыдущей печати
  36.   AcPlPlotConfig* pConfig = NULL;      
  37.   bool bShowPlotProgress = true;
  38.   // Запускаем публикацию
  39.   {
  40.     HelpHook hlp;
  41.     acplPublishExecute( dsdDataObj, pConfig, bShowPlotProgress );
  42.   }
  43. }
« Последнее редактирование: 18-07-2014, 13:41:32 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение