Как получить содержимое SAFEARRAY в одну строку в окне просмотраC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как получить содержимое SAFEARRAY в одну строку в окне просмотра

Сообщение Anonymous »

С недавнего времени я работаю на C++ с технологией COM, что означает использование объектов SAFEARRAY. Одной из первых проблем является просмотр содержимого такого объекта: в окне просмотра такой объект выглядит следующим образом:
Изображение

Я понимаю это, но предпочитаю показывать такой массив в виде однострочного (так было бы проще). чтобы сравнить два из них), поэтому я создал файл "C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\Packages\Debugger\Visualizers\ZSAFEARRAY.natvis".

Причина этого проста: при выполнении .natvisreload собственные визуализаторы в этом конкретном каталоге обрабатываются в алфавитном порядке в зависимости от имени файла, поэтому используйте имя, начинающееся с буквы «Z», приводит к тому, что этот файл обрабатывается после «windows.natvis», перезаписывая уже существующий визуализатор.
Но что я могу сделать, чтобы отображать список информации в виде одной строки? Итак, "windows.natvis" содержит следующую запись:

Код: Выделить всё



32
value[$i],nvoxb



Итак, я написал очень простой фрагмент кода:

Код: Выделить всё

APP_LOCAL_DEVICE_ID test; // for natvis reasons: check "ListItems"
test.value[0] = 0x01;
test.value[1] = 0x02;
test.value[2] = 0x04;
test.value[3] = 0x08;
test.value[4] = 0x10;
test.value[5] = 0x11;
test.value[6] = 0xAB;
test.value[7] = 0xFF;
Отображение этой переменной в окне просмотра дает следующий результат:
Изображение
=> Это более или менее то, что я хочу.
Итак, очень наивно, я изменил SAFEARRAY в моей записи ZSAFEARRAY.natvis следующим образом:

Код: Выделить всё



rgsabound[cDims - $i - 1].cElements
value[$i],nvoxb


Backward
cDims
rgsabound[cDims - $i - 1].cElements
rgsabound[cDims - $i - 1].lLbound
((signed short *)(*this).pvData)
...
((unsigned int *)(*this).pvData)
...


Это ни в коем случае не может работать: переменная $i в rgsabound[cDims - $i - 1].cElements и тег имеют совершенно другое значение!
Хотя я понимаю, почему это не может работать, я понятия не имею, как заставить это работать.
Есть ли у кого-нибудь идеи, как это сделать? получить элементы SAFERARRAY в виде одной строки в natvis?
Я работаю с Visual Studio 2022.

Подробнее здесь: https://stackoverflow.com/questions/798 ... tch-window
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»