Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Baton от 19-10-2015, 00:47:03

Название: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 19-10-2015, 00:47:03
Всем доброго времени суток!
У меня такой вопрос к сообществу. Мое АRX приложение нормально работает во всех Автокадах вплоть до 2016-го и под операционными системами вплоть до Windows 7 x64. Компилировалась под ObjectARX 2015. Никогда не было от пользователей никаких нареканий. На днях прислали рекламации, что есть проблемы. Среда мне пока неизвестная - Windows 8.1. Приложение нормально загружается, открывается главное диалоговое окно программы. Далее из этого окна должно открываться другое диалоговое окно. При попытке открыть его программа выдает ошибку из обработчика ошибок. Искал ошибку в коде и ничего пока не нашел. Может есть какие-нибудь нюансы при переходе на Windows 8? Может надо компилировать только под ObjectRX 2016? Windows 8 под рукой нет и не предвидится в ближайшее время, поэтому проверить сам не могу.
Заранее спасибо за ответ.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 19-10-2015, 08:13:45
Windows 8 под рукой нет и не предвидится в ближайшее время, поэтому проверить сам не могу.
Значит нужно передать версию с отладочной печатью пользователю чтобы локализовать ошибку. Или ставить себе виртуальную машину и отлаживать. Но второй вариант может не помочь, т.к. это может быть особенность именно той конфгурации, которая сложилась у пользователя.
Далее из этого окна должно открываться другое диалоговое окно. При попытке открыть его программа выдает ошибку из обработчика ошибок.
Если диалог модальный, то отлаживать скорее всего нужно или его конструктор или его метод OnInitDialog.
Может надо компилировать только под ObjectRX 2016?
Встречный вопрос. А что в инициализации диалога используются какие-то функции ObjectARX? Если нет, то причем здесь версия ObjectARX?
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Андрей Бушман от 19-10-2015, 09:23:00
Windows 8 под рукой нет и не предвидится в ближайшее время, поэтому проверить сам не могу.
Тогда это уподобляется лечению по фотографии... Если тестирование в Win8 даже не маячит на горизонте, то самый верный вариант (имхо): в системных требованиях указать, что для работы необходима Win7, не указывая Win8. Можно даже дополнительно акцентировать на этом внимание, мол именно Win7. А если всё же хочешь, чтобы работало и под Win8, то создавай создавай виртуальную машинку, ставь на ней интересующие тебя акады и тестируй, иначе возможно, что это не единственная проблема, которая неожиданно "всплывёт". IDE можно не ставить - удалённую отладку никто не отменял.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Николай Горлов от 19-10-2015, 09:29:16
как вариант, на втором окне есть какой-то компонент, не совсем стандартный ))). ну и сам компонент про восьмерку ничего не знает, следовательно, валит программу. так что если я угадал, то, либо ищите более свежую версию библиотеки уже с поддержкой win8 и\или win10, которой пользуетесь, либо придется дорабатывать компонент самостоятельно. в любом случае, даже если это не компонент, без win8 на компьютере проблему не решить.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 19-10-2015, 11:49:06
без win8 на компьютере проблему не решить.
Если это действительно проблема совместимости с Win8, в чем я сильно сомневаюсь.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Николай Горлов от 19-10-2015, 12:21:14
Цитировать
Если это действительно проблема совместимости с Win8, в чем я сильно сомневаюсь.
а что это еще может быть, если одна и та же ARX под таким же автокадом работает на win7 и НЕ работает под win8?
первое, чтоб приходит на ум - проблемы с содержимым окна. просто у меня была подобная ерунда, правда winXP->win7. Не работал один из достаточно стареньких и редко используемых EXE-ников. сам экзешник был написан при участии библиотеки WTL. библиотека просто была достаточно старенькая и ничего не знала о новых версиях виндузов. скачали свежачок ))). всё вроде как запустилось, но в самой библиотеке чего-то сильно намудрили и пришлось тягать кучу дополнительных dll-ок в придачу к экзешничку. начались конфликты с winXP... ))). ну и чтоб не делать отдельный вариант установки под win7/8, отказались от этой ерунды и пришлось мне переписать всё на MFC.
я конечно не исключаю того, что в момент запуска окна идет коннект на БД с вычитыванием огромного количества данных, которую забыли на этом компьютере поставить или сразу рисуется трехэтажный особняк с детальным освещением ))) или еще что-то из разряда фантастики (обычно на OnInitDialog сразу логику не цепляют, но мало ли ))) ).
а, ну и вторая мысля, которая случайно попала в голову ))) - переключение ресурсов. бывает так, что на одном компе всё ок, а второй напрочь отказывается показывать окно (правда в этом случае всегда выпадает сообщение об ошибке в ресурсах. по крайней мере на моих компьютерах). но это от windows вообще не зависит, а тут проблемы только с win8.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 19-10-2015, 12:27:45
а что это еще может быть, если одна и та же ARX под таким же автокадом работает на win7 и НЕ работает под win8?
Вариантов море. Но как правильно сказал Андрей Бушман, это всё гадание на кофейной гуще. Сначала нужно локализовать ошибку в коде, а потом уже разбираться проблема ли это с самим кодом или с Windows8.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 20-10-2015, 01:02:09
Большое спасибо за советы и комментарии всем отозвавшимся!
Если диалог модальный, то отлаживать скорее всего нужно или его конструктор или его метод OnInitDialog.
А что в инициализации диалога используются какие-то функции ObjectARX? Если нет, то причем здесь версия ObjectARX?
Диалог модальный. Конструктор диалога вообще не содержит функций.
В OnInitDialog мне нужно заполнить список. Данные получаю из своего NamedObjectsDictionary:
errorStatus = acdbHostApplicationServices()->workingDatabase()->getNamedObjectsDictionary(pNamedobj, AcDb::kForRead);
Далее
AcDbDictionary*   pRoomDict = NULL;
errorStatus = pNamedobj->getAt(ROOM_DICTIONARY_VER_3, (AcDbObject*&)pRoomDict, AcDb::kForRead);

Все errorStatus проверяю. Далее через итератор прохожу по моему NamedObjectsDictionary, получаю необходимые значения и заполняю список. Все открытые объекты вовремя закрываю. За этим всегда смотрю внимательно. Итератор в конце работы удаляю.
Ошибок в NamedObjectsDictionary нет, так как в главном диалоге тоже заполняется другой список из того же словаря. И делается это успешно.
Так же мне необходимо для работы диалога получить информацию из базы данных чертежа:
AcDbDatabase* pDatabase = acdbHostApplicationServices()->workingDatabase();
Потом прохожу по базе чертежа и получаю информацию из нужных мне объектов. Здесь, конечно, надо еще раз пройти по всем функциям и проверить на открыл-закрыл объекты. Хотя, если бы были такие ошибки, то вылетало бы при всех версиях. Это я знаю хорошо :)).

как вариант, на втором окне есть какой-то компонент, не совсем стандартный )))
Нестандартные компоненты в диалогах не применяю. Делаю это сознательно именно для полной совместимости со всеми версиями операционок и Автокадов.

ну и вторая мысля, которая случайно попала в голову ))) - переключение ресурсов.
Перед открытием диалога применяю CAcModuleResourceOverride.

Тогда это уподобляется лечению по фотографии...
Ну, есть такие люди, которые лечат по фотографии :)).
Я обратился за помощью, потому что может кто уже сталкивался с проблемами.

А если всё же хочешь, чтобы работало и под Win8, то создавай создавай виртуальную машинку, ставь на ней интересующие тебя акады и тестируй, иначе возможно, что это не единственная проблема, которая неожиданно "всплывёт". IDE можно не ставить - удалённую отладку никто не отменял.
К сожалению, я не такой продвинутый в этих делах :(. Так что пока попробую по простому, по крестьянски - найду комп с windows 8.

Что в итоге. Сейчас уже скачал ObjectARX 2016. Попробую перекомпилировать и послать программу человеку, у которого программа вылетает. Так же распечатаю код и проверю с карандашом в руках еще раз (наверное в десятый) построчно. Были у меня чудеса, когда ошибки в программах находились случайно лет через 5 после успешной эксплуатации программ. Но ошибки эти были все же не в таких явных местах, как инициализация диалогов. На работе нашел людей с Windows 8. Так что есть перспективы проверить. Еще раз спасибо за отзывы. По итогам борьбы отпишусь.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Андрей Бушман от 20-10-2015, 10:00:24
К сожалению, я не такой продвинутый в этих делах :(. Так что пока попробую по простому, по крестьянски - найду комп с windows 8.
Дело твоё. Если вдруг возникнет желание почитать по теме, то здесь  (http://bushman-andrey.blogspot.ru/2014/03/blog-post.html)я показывал как это делается (всё достаточно просто).
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 20-10-2015, 10:40:23
Если вдруг возникнет желание почитать по теме, то здесь я показывал как это делается (всё достаточно просто).
Спасибо за наводку. По правде говоря, давно хотел разобраться с этой темой, но руки не доходили. Ну вот жизнь потихоньку и заставляет.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 20-10-2015, 12:42:39
Перед открытием диалога применяю CAcModuleResourceOverride.
Перед открытием какого из диалогов? Я правильно понял, что второй диалог открывается тогда, когда первый диалог не закрыт?
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 20-10-2015, 19:06:41
Я правильно понял, что второй диалог открывается тогда, когда первый диалог не закрыт?
Главный диалог убирается с экрана через BeginEditorCommand(), потому что при определенных событиях может произойти возврат из дочернего диалога обратно. Потом открывается дочерний диалог. Я всегда сомневался, надо ли при дочернем диалоге применять опять CAcModuleResourceOverride. На всякий случай ставлю, и вроде все работает нормально. Буду Вам признателен, если Вы мне проясните мозги по этому поводу. В документации по ARX ясно про это ничего не написано. Там только в общих чертах. Правда, может, я что и упустил.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 20-10-2015, 19:11:46
Главный диалог убирается с экрана через BeginEditorCommand(), потому что при определенных событиях может произойти возврат из дочернего диалога обратно.
Ничего не понял. Этот метод нужен только если идёт обращение к редактору AutoCAD (т.е. например вызывается acedGetPoint(), acedGetAngle() и аналогичные им функции). Если из одного диалога вызывается другой диалог, то этот метод не нужен и более того вреден, т.к. переключает ресурсы на AutoCAD. 
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 20-10-2015, 19:50:01
Ничего не понял. Этот метод нужен только если идёт обращение к редактору AutoCAD (т.е. например вызывается acedGetPoint(), acedGetAngle() и аналогичные им функции). Если из одного диалога вызывается другой диалог, то этот метод не нужен и более того вреден, т.к. переключает ресурсы на AutoCAD.
Я применяю этот метод всегда перед открытием диалогов. Почти во всех моих диалогах может быть обращение к чертежу для получения некоторой информации из выделенных объектов, или если надо получить какой-нибудь размер на чертеже для ввода его в диалог через указание каких-нибудь точек на чертеже. Естественно через все acedGet...()  и через acedEntSel(). Поэтому применяю CAcModuleResourceOverride в самом начале диалога один раз. Если я не прав, то скажите, что я неверно делаю. Мои программы с таким подходом работают давно и у меня в конторе и так же в других организациях. Ни от кого рекламаций не получал. Еще раз говорю, что в документации по ARX об этом подробно не написано. К тому же все на басурманском языке. Мог что-то не так понять. Прошу помочь в этом вопросе.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 20-10-2015, 20:00:23
Я никогда не обращался к редактору AutoCAD из вложенных диалогов. Считаю такой метод неправильным. IMHO.
Разобраться, что будет с переключением ресурсов в таком случае крайне сложно. В такой ситуации перед обращением к AutoCAD я бы принудительно переключал ресурсы на него и затем возвращал обратно: http://adn-cis.org/mfc-problemyi-s-cacmoduleresourceoverride.html
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 21-10-2015, 01:00:31
Ну вот, предположительно нашел неточность в коде. Привожу с необходимыми комментариями код функции, которая вызывает дочерний диалог.

Код - C++ [Выбрать]
  1. void CMainDlg::OnBnClickedDictionary()
  2. {
  3.    //Скрываем главный диалог, переходя в редактор Автокада.
  4.    BeginEditorCommand();
  5.  
  6.    //Переопределяем ресурсы.
  7.    CAcModuleResourceOverride resOverride;
  8.    
  9.    //Создаем и открываем дочерний диалог.
  10.    
  11.    //Этот код убран, так как из-за него скорее всего глючит
  12.    //программа в Автокад 2016 под Windows 8.1.
  13.    //Родительским окном здесь является мое главное окно.
  14.    //CRoomDefManagerDlg RoomDefDlg(this));
  15.    
  16.    //Этот код скорее всего будет работать, так как другой
  17.    //дочерний диалог создается именно этим способом.
  18.    //Родительским окном здесь является окно АВтокада.
  19.    CRoomDefManagerDlg RoomDefDlg(CWnd::FromHandle(adsw_acadMainWnd()));
  20.    
  21.    INT_PTR nResult = RoomDefDlg.DoModal();
  22.    
  23.    //Если вышли из дочернего диалога через OK, то выходим из главного диалога.
  24.    if(nResult == IDOK)   this->OnOK();
  25.    //Иначе уходим обратно в главный диалог.
  26.    else
  27.    {
  28.       //Завершаем работу в редакторе Автокада.
  29.       CompleteEditorCommand();
  30.  
  31.       //Активизируем подсказки в главном диалоге. Если это не сделать,
  32.       //то подсказки к элементам диалога в главном диалоге работать не будут.
  33.       m_ToolTip.Activate(TRUE);
  34.       //Устанавливаем фокус на нужный элемент в главном диалоге.
  35.       m_cbRoomNames.SetFocus();
  36.    }
  37. }

В старой версии (строка 14) для дочернего диалога родительским окном был мой главный диалог.
В новой версии (строка 19) для дочернего окна родительским окном стало окно Автокада.
В новом варианте фактически дочернее окно дочерним окном не является. Программа переключается в редактор Автокада и из редактора Автокада вызывает новый диалог.
Из моих опытов с CAcModuleResourceOverride получается, что перед каждым вызовом диалогового окна надо пользоваться этим классом. В моих диалогах есть такая штука, как подсказки к элементам - ToolTip. Подсказки используют строки через ресурсы. Если ресуcры не переопределять каждый раз, то подсказки не работают. Путаницы при этом не происходит. Когда уничтожается объект класса CAcModuleResourceOverride, контекст ресурсов возвращается на предыдущий уровень. Проверил все тщательно.
Теперь остается только отправить новую версию пользователю, чтобы, надеюсь, подтвердить мои предположения.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 21-10-2015, 19:23:28
Ну вот, предположительно нашел неточность в коде. Привожу с необходимыми комментариями код функции, которая вызывает дочерний диалог.
Надеюсь для компиляции используется VS 2012 SP4 и Platform Toolset = v110
На эту мысль меня натолкнула необходимость использования CWnd::FromHandle(adsw_acadMainWnd()). Обычно это встречается в случае совмещения различных версий MFC (у AutoCAD одна версия, у arx-приложения другая).
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 21-10-2015, 20:32:29
Надеюсь для компиляции используется VS 2012 SP4 и Platform Toolset = v110
Именно это и используется.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 22-10-2015, 10:28:59
Теперь остается только отправить новую версию пользователю, чтобы, надеюсь, подтвердить мои предположения.
Я бы добавил в тестовую версию отладочную печать в файл, для того чтобы понять в какой момент появляется сообщение об ошибке. Это конечно не полноценная отладка, но позволяет более-менее локализовать источник ошибки.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 22-10-2015, 12:10:35
Еще обратил внимание (глядя на исходный код), что не во всех случаях для BeginEditorCommand отрабатывает парный CompleteEditorCommand(), что неправильно. Кроме того восстановление ресурсов (деструктор resOverride) срабатывает уже после CompleteEditorCommand()
Я бы наверное поступил так:

Код - C++ [Выбрать]
  1. INT_PTR nResult = IDOK;
  2. BeginEditorCommand();
  3. {
  4.    CAcModuleResourceOverride resOverride;
  5.    CRoomDefManagerDlg RoomDefDlg(CWnd::FromHandle(adsw_acadMainWnd()));
  6.    nResult = RoomDefDlg.DoModal();
  7. }  
  8. CompleteEditorCommand();
  9. // А здесь уже идёт анализ nResult и соответствующие действия
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 22-10-2015, 23:00:27
Можно и так, как Вы предлагаете. Но работает и мой вариант.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 22-10-2015, 23:03:06
Произведенные мной в коде исправления никак не повлияли на программу. Буду дальше решать проблему.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Александр Ривилис от 23-10-2015, 11:38:57
Буду дальше решать проблему.
С такими темпами к Новому Году... :)
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 24-10-2015, 01:44:37
С такими темпами к Новому Году... :)
Если к Новому году поспею, то это будет очень быстро. Поспешность известно к чему приводит :).
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 03-11-2015, 13:04:29
Пришла информация от пользователей, что под Windows 10 и Автокад 2016 x64 программа тоже вылетает. Так что проблема заключена в сочетании Автокада и операционной системы. Придется ставить каким-нибудь способом новые винды и отлаживать.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Андрей Бушман от 03-11-2015, 14:20:34
каким-нибудь способом
выше я обозначал "способ".
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Debalance от 10-11-2015, 16:25:29
выше я обозначал "способ".
Способ безусловно хорош, но... используемая Вами конфигурация системы:
Цитировать
процессор Core i7
объём оперативной памяти - 24 Gb
пять жёстких дисков по 1Tb каждый, из них три внешних (для виртуальных машинок целиком отведён один из дисков, а для резервного копирования - ещё один)
видеокарта NVIDIA GeForce GTX 570
в наше кризисное время далеко не всем по-карману. Рискну предположить, что если у человека нет возможности поставить лицензионный 8.1, то и с покупкой такого железа могут быть тоже сложности... материального характера.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Андрей Бушман от 10-11-2015, 17:11:31
Всё это было ДО кризиса, конечно же...

По указанной ссылке была обозначена конфигурация десктопной машинки (в то время цены на железо ещё были относительно приемлемыми). Сейчас покупку аналогичной конфигурации я бы себе, пожалуй, позволить не смог. Но это не означает, что на менее мощных машинках это работать не будет. Будет, хотя и не так шустро, как возможно хотелось бы.

На работе всегда можно поговорить с IT-шниками, чтобы они на сервере выделили вам пару-тройку виртуальных машинок, которые вы сможете использовать для тестирования. В этом случае ваш физический компьютер, которым вы пользуетесь в офисе, не обязан быть мощным, т.к. вы будете использовать его лишь в качестве терминала.

Однако, если ваша компания может позволить себе обновить ваш компьютер на более мощный, то это позволит вам на нём установить дополнительный набор виртуальных машинок (по потребности) и использовать их в дополнение к тем, которые уже крутятся на сервере.

Кроме того, всегда существует возможность из дома удалённо (по RDP) работать как с вашим физ. компьютером, находящимся в офисе, так и непосредственно с виртуальными машинками, крутящимися на сервере. Я время от времени так и поступаю: сидя за слабым нотиком (например, когда не хочу включать основной комп) дома я вполне комфортно работаю, т.к. все вычисления производятся на сервере, а мой нотик работает в качестве терминала (тут всё упирается в скорость передачи данных по сети, а с этим, как правило проблем нет).

Дома у меня имеется обычный, среднестатистический (как мне кажется) нотик ASUS K551L (почти разбитый в хлам). На нём так же установлено несколько виртуальных машинок. Не скажу что всё "просто летает" (подтормаживает, конечно же), но работать можно. Одновременно более двух виртуальных машинок на нём не запускаю; как правило довольствуюсь вообще одной, т.к. IDE установлена непосредственно на нотике, а виртуальные машинки - исключительно для тестирования и отладки посредством удалённого подключения. Однако, как я уже писал выше - чаще всего нотик я использую для подключения к серверным виртуальным машинкам, работающем в офисе (тогда всё работает шустро).
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Debalance от 11-11-2015, 10:23:04
Однако, как я уже писал выше - чаще всего нотик я использую для подключения к серверным виртуальным машинкам, работающем в офисе (тогда всё работает шустро).
Ловко у Вас всё устроено! Но боюсь, судя по завлениям автора топика:
Среда мне пока неизвестная - Windows 8.1...
и
Windows 8 под рукой нет и не предвидится в ближайшее время...
можно сделать предварительный вывод, что у человека нет возможности организовать своё рабочее место подобным образом.
В этой связи я бы посоветовал автору просто обновить свой Win 7 на Win 10, что называется free (если конечно мы говорим о лицензионном софте), благо такая возможность сейчас есть.
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Андрей Бушман от 11-11-2015, 11:44:41
можно сделать предварительный вывод, что у человека нет возможности организовать своё рабочее место подобным образом.
Или он пока не общался с IT-шниками на эту тему. Заодно не плохо было бы попытаться поговорить с руководством об оформлении подписки MSDN. Насколько я помню, два года стоят 60 т.р. Многие компании могу себе это позволить. Подписка предоставляет доступ почти ко всем продуктам Майкрософт и ключи к ним. Всё это можно использовать для разработки и тестирования (в итоге выходит дешевле, чем всё покупать по отдельности). Я именно этим и пользуюсь. А vmware сейчас используется практически в каждом IT-отделе, со всеми вытекающими...
Название: Re: ARX приложение для Автокада 2016 x64 под Windows 8.1.
Отправлено: Baton от 15-12-2015, 01:27:14
Ну вот, почти к Новому Году проблема решилась.
Собрался с силами, поставил VirtualBox, установил Windows 8.1, Автокад 2016 и быстро нашел ошибку.
Это код для добавления данных в объект списка CAcUiListCtrl:
LV_ITEM item;
item.iItem = nItem;
item.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM;
item.state = 0;
item.stateMask = 0;
item.lParam = (DWORD)pObject;

Последняя строка неверна. Надо:
item.lParam = (LPARAM)pObject;

Так что, как всегда, без собственных ошибок не обходится. Откуда-то тянулась эта неточность давно и как-то до Windows 8 прокатывало. Видимо, изменилось отношение системы к указателям на объекты.
Всем спасибо за участие!