|
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
|
Получить указатель на данные, хранящиеся в SafeArray (не на сам SafeArray)29.07.2013, 12:30. Показов 3249. Ответов 7
Метки нет (Все метки)
Есть некий SafeArray, о котором заранее известно, что это одномерный массив байт. То есть структура его проста и неизменна. Надеюсь, это облегчит следующую задачу: передать эти данные в программу, не понимающую SafeArray.
Насколько я знаю, SafeArray - это структура, в начале которой служебная информация (прежде всего длина), а затем собственно данные типа Variant. Таким образом, можно просто отсчитать какое-то количество байт от начала (т.е. пропустить заголовок, или как он там называется), а потом считывать каждый шестнадцатый байт. Ну или как-то так... Я понимаю, что это идеологически неверно, и надо использовать какой-нибудь SafeArrayAccessData. Но всё же, это реально? Или вообще бред? А как тогда поступить? Очень не хочется копировать из SafeArray в обычный массив байт.
0
|
|
| 29.07.2013, 12:30 | |
|
Ответы с готовыми решениями:
7
Bad SAFEARRAY Transpose SafeArray Уничтожение SafeArray в Delphi XE |
|
Ушел с форума
|
|
| 29.07.2013, 12:36 | |
|
А почему бы не использовать SafeArrayLock ?
0
|
|
|
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
|
| 29.07.2013, 13:01 [ТС] | |
|
Что-то я не уловил, как это может мне помочь. Наверное, я плохо объяснил. Есть DLL, написанная на C++. Она получает (из внешнего мира) некие данные в виде SafeArray. Я написал прогу (на экзотическом скриптовом языке), которая подключает эту DLL и получает указатель на SafeArray. Проверил - вроде всё работает. По крайней мере, когда данных нет, передаётся NULL, а когда есть - что-то другое. Надо полагать, адрес в памяти, где расположен SafeArray. Теперь я могу считывать данные оттуда, байт за байтом. А что толку? Интерпертировать эти данные моя программа не может, потому что не знакома с понятием SafeArray. По сути, мне надо написать враппер для SafeArray, но я не знаю, как.
0
|
|
|
Ушел с форума
|
||||||
| 29.07.2013, 13:07 | ||||||
|
Вот объявление SAFEARRAY (взято из MSDN):
По идее, Вам нужно в "экзотическом скриптовом языке", имея указатель на SAFEARRAY, добраться до этого поля. Но SafeArrayLock все равно придется вызвать, чтобы "запиннить" массив в памяти.
1
|
||||||
|
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
||||||||
| 29.07.2013, 14:30 [ТС] | ||||||||
0
|
||||||||
|
Ушел с форума
|
|||
| 29.07.2013, 14:50 | |||
|
"sizeof (array) * 12" байт. Короче, будет указывать в пустоту. Правильнее так: "((BYTE *)array) + 12". Во всяком случае, так подразумевается в соответствующем топике на MSDN.
1
|
|||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
||
| 29.07.2013, 17:09 | ||
|
1
|
||
|
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
||||
| 29.07.2013, 17:55 [ТС] | ||||
0
|
||||
| 29.07.2013, 17:55 | |
|
Помогаю со студенческими работами здесь
8
Как передать SAFEARRAY в C#? COM: SAFEARRAY добавление элементов Массив представить в виде SAFEARRAY Как сделать SafeArray (MFC)? Преобразование динамического байтового массива в SafeArray Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|