Установка и очистка признака модификации документа в .NET

Автор Тема: Установка и очистка признака модификации документа в .NET  (Прочитано 8746 раз)

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


Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
У всех 32-битных версий значение параметра EntryPoint одно и то же. Аналогично и для 64-битных. Т.о. для большей наглядности и удобства имеет смысл вынести значения в статические константные переменные.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Т.о. для большей наглядности и удобства имеет смысл вынести значения в статические константные переменные.
Сложно поспорить. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
А есть ли функция для получения текущего значения DbMod, т.е. для программного определения изменялся ли чертеж?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А есть ли функция для получения текущего значения DbMod, т.е. для программного определения изменялся ли чертеж?
Для активного чертежа можно просто проверить значение системной переменной DBMOD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А вообще в ObjectARX есть недокументированная функция:
Код - C++ [Выбрать]
  1. int __cdecl acdbGetDbmod(class AcDbDatabase *);
которая возвращает значение DBMOD для переданной базы. Это если необходимо работать не только с активной базой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Точно!  :)
Спасибо!

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Не работает в 2018 версии (((

"Не удается найти точку входа \"?acdbSetDbmod@@YAJPEAVAcDbDatabase@@J@Z\" в DLL \"acdb22.dll\"."

Где вообще можно посмотреть структуру файла acdb22.dll - какие функции и точки входа?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не работает в 2018 версии (((

"Не удается найти точку входа \"?acdbSetDbmod@@YAJPEAVAcDbDatabase@@J@Z\" в DLL \"acdb22.dll\"."
Для 2018 x64: "?acdbSetDbmod@@YAHPEAVAcDbDatabase@@H@Z"
Для 2018 x86: "?acdbSetDbmod@@YAHPAVAcDbDatabase@@H@Z"

Где вообще можно посмотреть структуру файла acdb22.dll - какие функции и точки входа?
Проще всего при помощи утилиты dumpbin.exe из Visual Studio. Причем напускать её лучше на acdb22.lib из ObjectARX SDK, а не на acdb22.dll из AutoCAD, так как в этом случае тебе придётся иметь обе разрядности AutoCAD, а в ObjectARX SDK они уже есть обе:
Код - INI [Выбрать]
  1. dumpbin /exports acdb22.lib >acdb22.txt
« Последнее редактирование: 25-06-2017, 00:27:31 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Не работает. Код отрабатывает без ошибок, но значение DBMOD не меняет.

Код - C# [Выбрать]
  1. namespace dbmod
  2. {
  3.     public class Class1
  4.     {
  5.         [CommandMethod("test_dbmod_set0")]
  6.         public static void test_dbmod_set0()
  7.         {
  8.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  9.             DbModClass.acdbSetDbmod(ref db, 0);
  10.         }
  11.  
  12.         [CommandMethod("test_dbmod_set1")]
  13.         public static void test_dbmod_set1()
  14.         {
  15.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  16.             DbModClass.acdbSetDbmod(ref db, 1);
  17.         }
  18.     }
  19.  
  20.     public class DbModClass
  21.     {
  22.         [DllImport("acdb22.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acdbGetDbmod@@YAHPEAVAcDbDatabase@@@Z")]
  23.         private static extern Int32 acdbSetDbmod22x64(IntPtr db, Int32 newDbMod);
  24.  
  25.         public static Int32 acdbSetDbmod(ref Database db, Int32 newDbMod)
  26.         {
  27.             if (IntPtr.Size == 4)
  28.                 return acdbSetDbmod22x86(db.UnmanagedObject, newDbMod);
  29.             else
  30.                 return acdbSetDbmod22x64(db.UnmanagedObject, newDbMod);
  31.         }
  32.     }
  33. }

Похоже это или баг или закрыли возможность менять этот параметр.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я исправлял вчера строки. Перепроверь.
Вместо "?acdbGetDbmod@@YAHPEAVAcDbDatabase@@@Z" должно быть
"?acdbSetDbmod@@YAHPEAVAcDbDatabase@@H@Z"
« Последнее редактирование: 25-06-2017, 10:16:29 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Да!
Спасибо!
Теперь я так понимаю всё работает нормально?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Теперь я так понимаю всё работает нормально?
Работает отлично! ))