COM. CustomEntity. Палитра свойств. AutoCAD 2017

Автор Тема: COM. CustomEntity. Палитра свойств. AutoCAD 2017  (Прочитано 14771 раз)

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

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #15 : 24-06-2016, 09:58:54 »
inf-файлы??? Это ты о чем???
ооо, это страшный механизм по регистрации DBX-ин во время инсталляции программы. собственно говоря, в процессе установки, чтоб в самом инсталляторе не городить запись в ветки реестра, вынесли то, что касается DBX в INF файлы (можно было и в REG файлы, но что-то там не сросталось. не помню уже точно. было это еще во времена 2011 автокада кажись). в общем так выглядит кусок по регистрации одной DBX-ины для 2010-2012 автокада
Код - Microsoft Registry [Выбрать]
  1. [Version]
  2. Signature=$CHICAGO$
  3.  
  4. [DefaultInstall]
  5. AddReg=AddSwp,... ну и другие DBX-ины
  6.  
  7. [AddSwp]
  8. HKCR,"acadSvpDBX.AcDbSvpWraper","@",,"AcDbSvpWraper Class"
  9. HKCR,"acadSvpDBX.AcDbSvpWraper\CLSID","@",,"{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}"
  10. HKCR,"acadSvpDBX.AcDbSvpWraper\CurVer","@",,"acadSvpDBX.AcDbSvpWraper.1"
  11. HKCR,"acadSvpDBX.AcDbSvpWraper.1","@",,"AcDbSvpWraper Class"
  12. HKCR,"acadSvpDBX.AcDbSvpWraper.1\CLSID","@",,"{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}"
  13. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}","@",,"AcDbSvpWraper Class"
  14. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}","AppID",,"{B57D127A-68A7-43D7-BA62-70B3979C0512}"
  15. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}\InProcServer32","@",,"%PROG_FOLDER%\lctSvpDBX_2010x86.dbx"
  16. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}\InProcServer32","ThreadingModel",,"Apartment"
  17. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}\ProgID","@",,"acadSvpDBX.AcDbSvpWraper.1"
  18. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}\TypeLib","@",,"{D05BE060-66D7-4486-B60E-0C7140604C16}"
  19. HKCR,"CLSID\{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}\VersionIndependentProgID","@",,"acadSvpDBX.AcDbSvpWraper"
  20. HKCR,"Interface\{5C0A39EF-BB80-41E6-913C-4883B6474049}","@",,"IAcDbSvpWraper"
  21. HKCR,"Interface\{5C0A39EF-BB80-41E6-913C-4883B6474049}\ProxyStubClsid","@",,"{00020424-0000-0000-C000-000000000046}"
  22. HKCR,"Interface\{5C0A39EF-BB80-41E6-913C-4883B6474049}\ProxyStubClsid32","@",,"{00020424-0000-0000-C000-000000000046}"
  23. HKCR,"Interface\{5C0A39EF-BB80-41E6-913C-4883B6474049}\TypeLib","@",,"{D05BE060-66D7-4486-B60E-0C7140604C16}"
  24. HKCR,"Interface\{5C0A39EF-BB80-41E6-913C-4883B6474049}\TypeLib","Version",,"1.0"
  25. HKCR,"TypeLib\{D05BE060-66D7-4486-B60E-0C7140604C16}\1.0","@",,"techacadSvpDBX 1.0 Type Library"
  26. HKCR,"TypeLib\{D05BE060-66D7-4486-B60E-0C7140604C16}\1.0\0\win32","@",,"%PROG_FOLDER%\lctSvpDBX_2010x86.dbx"
  27. HKCR,"TypeLib\{D05BE060-66D7-4486-B60E-0C7140604C16}\1.0\FLAGS","@",,"0"
  28. HKCR,"TypeLib\{D05BE060-66D7-4486-B60E-0C7140604C16}\1.0\HELPDIR","@",,"%PROG_FOLDER%"
  29. HKLM,"SOFTWARE\Autodesk\ObjectDBX\%ACADVER%\ActiveXCLSID","CAcDbSWP",,"{C7C79D82-C26E-472F-8BAB-910DB8CDC5CE}"
  30.  
  31. [Strings]
  32. ACADVER="R19.0"
  33. PROG_FOLDER="c:\folder"
  34.  
короче говоря, когда инсталлятор выгрызает из себя заготовку INF файла, перед запуском этого самого файла на выполнение он в нее дописывает еще раздел Strings, где описывается путь установки DBX-ины и версия автокада.

ну и регистрация всех DBX-ин для одной ветки автокада (по бинарной совместимости) происходит в одном INF файле.
В принципе всё работает, но если есть возможность вообще не городить огород, почему бы ей не воспользоваться :)

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

Оффлайн Sergey_K

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #16 : 18-08-2019, 19:08:30 »
Замени описание DllRegisterServer на вот это (к сожалению уже не помню откуда его взял):

Заменил. Что привело к ошибке компилятора
Извините, вам запрещён просмотр содержимого спойлеров.
« Последнее редактирование: 18-08-2019, 20:50:13 от Sergey_K »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #17 : 18-08-2019, 20:14:08 »
Sergey_K,
Чуть-чуть нужно подправить для последних версий VS:
Код - C++ [Выбрать]
  1. typedef void (*OaEnablePerUserTLibRegistrationPtr)();
  2. STDAPI DllRegisterServer(void)
  3. {
  4.   HINSTANCE hInstOle32=NULL;
  5.   try
  6.   {
  7.     HRESULT hr = _AtlModule.RegisterServer(TRUE);
  8.     if(FAILED(hr))
  9.     {
  10.       hInstOle32 = LoadLibrary(_T("Oleaut32.dll"));
  11.       if(hInstOle32)
  12.       {
  13.         OaEnablePerUserTLibRegistrationPtr lr=(OaEnablePerUserTLibRegistrationPtr)GetProcAddress(hInstOle32,("OaEnablePerUserTLibRegistration"));
  14.  
  15.         if(lr!=NULL)
  16.         {
  17.           lr();
  18.           hr = _AtlModule.RegisterServer(TRUE);
  19.           if(SUCCEEDED(hr))
  20.           {
  21.             FreeLibrary(hInstOle32);
  22.             return hr;
  23.           }
  24.         }      
  25.       }  
  26.  
  27.       HKEY hKCr;
  28.       hr=RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software\\Classes"),0,KEY_READ,&hKCr);
  29.       if(hr!=ERROR_SUCCESS)
  30.       {
  31.         return hr;
  32.       }
  33.       hr = RegOverridePredefKey(HKEY_CLASSES_ROOT,hKCr);
  34.       RegCloseKey(hKCr);
  35.       if(FAILED(hr))
  36.       {
  37.         return hr;
  38.       }  
  39.       hr = _AtlModule.RegisterServer(TRUE);
  40.       RegOverridePredefKey(HKEY_CLASSES_ROOT,NULL);
  41.       hr=S_OK;
  42.     }
  43.     if(hInstOle32)
  44.       FreeLibrary(hInstOle32);
  45.     return hr;
  46.   }
  47.   catch (...)
  48.   {
  49.     if(hInstOle32)
  50.       FreeLibrary(hInstOle32);
  51.     return E_FAIL;
  52.   }
  53. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_K

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #18 : 18-08-2019, 20:47:50 »
Чуть-чуть нужно подправить

Спасибо!
С OaEnablePerUserTLibRegistrationPtr регистрация прошла

Оффлайн Sergey_K

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #19 : 28-10-2019, 17:05:43 »
Регистрация COM сервера под пользователем без бубна:
Код - C++ [Выбрать]
  1. STDAPI DllRegisterServer() {
  2.     ATL::AtlSetPerUserRegistration(true);
  3.     _AtlModule.RegisterServer(TRUE);
  4. }

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: COM. CustomEntity. Палитра свойств. AutoCAD 2017
« Ответ #20 : 28-10-2019, 17:11:29 »
Регистрация COM сервера под пользователем без бубна:
Код - C++ [Выбрать]
  1. STDAPI DllRegisterServer() {
  2.     ATL::AtlSetPerUserRegistration(true);
  3.     _AtlModule.RegisterServer(TRUE);
  4. }
Оно делает тоже самое, что и тот код, который я привёл. Но в ранних версиях не было метода ATL::AtlSetPerUserRegistration
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение