0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 57

COM: SAFEARRAY добавление элементов

05.12.2015, 19:24. Показов 1918. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый. Перерыл множество ресурсов в поисках ответа на мой вопрос, но всё тщетно.

Существует функция, в ней 4 типа данных: int, char, string, float. Все эти данные должны приводиться к одному общему, добавляться в массив SAFEARRAY и отправляться в dll на C#.

Вопрос: каким образом добавлять новые значения в массив SAFEARRAY?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
cell AMX_NATIVE_CALL __callDotnetMethod(AMX* amx, cell* params){
    int methodID = params[ 1 ] ;
    
    char* format;
    amx_StrParam(amx, params[ 2 ], format);
 
    SAFEARRAYBOUND rgsabound[1]; // create bounds for safearray
 
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = strlen(format);
 
    SAFEARRAY *pArray = SafeArrayCreate(VT_BSTR, 1, rgsabound); // initializate array
 
    long Idx = 0;
 
    for( int j = 0 ; j != strlen(format) ; j ++ ) {
        char key = format[ j ] ;
        switch(key){
                case 'i': { 
                            int i = *get_amxaddr(amx, params[j + 3]);
                            break;
                          }
                case 's': {
                            char* s ;
                            amx_StrParam(amx, params[j + 3], s);
 
                            break;
                          }
                case 'c': {
                            char* c ;
                            amx_StrParam(amx, params[j + 3], c);
                            break;
                          }
                case 'f': { 
                            float f = amx_ctof(*get_amxaddr(amx, params[j + 3]));
 
                            break;
                          } 
        }
    }
 
    pluginPtr pICalc(__uuidof(pluginClass));
    VARIANT_BOOL lResult = false;
    pICalc->callDotnetMethod(methodID, bstr_t(format), pArray, &lResult);
 
    return 1;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2015, 19:24
Ответы с готовыми решениями:

Получить указатель на данные, хранящиеся в SafeArray (не на сам SafeArray)
Есть некий SafeArray, о котором заранее известно, что это одномерный массив байт. То есть структура его проста и неизменна. Надеюсь, это...

Bad SAFEARRAY
Создаю функцию которая получает данные из объекта типа _variant_t, мне нужно получить из него 2 значения типа double. Я плохо знаю...

Transpose SafeArray
Всем привет. Набросал функцию для транспонирования SafeArray (двухмерный), с любым типом данных. Вопрос знатокам: можно ли сделать...

1
Модератор
 Аватар для vxg
3402 / 2173 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
07.12.2015, 12:18
Цитата Сообщение от Seregamil Посмотреть сообщение
каким образом добавлять новые значения в массив SAFEARRAY
новые в смысле расширять количество элементов массива?

Добавлено через 2 минуты
...если это то наверное через SafeArrayRedim, а если просто добавлять то я думаю SafeArrayPutElement
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2015, 12:18
Помогаю со студенческими работами здесь

Как передать SAFEARRAY в C#?
Есть такой метод в C++ библиотеке (метод не мой, почему написан именно так не знаю): //CEncrypt STDMETHODIMP CEncrypt::RC4Encrypt(char...

Уничтожение SafeArray в Delphi XE
Всем привет. Я перешел с Delphi 7 на Delphi XE4. В седьмой версии при создании элементов типа PSafeArray необходимо было самому следить за...

Массив представить в виде SAFEARRAY
Вот такой массив $tak = array(0,0,1,0,1,0,0,0,1,1); Научите, пожалуйста, как представить это в виде SAFEARRAY (VT_ARRAY|VT_R8). ...

Как сделать SafeArray (MFC)?
Сабж, как используя MFC создать SafeArray и сделать метод который принимая их контейнера массив вариантов и пихал его в SafeArray (размеры...

Преобразование динамического байтового массива в SafeArray
Здравствуйте товарищи! В общем такая проблема, есть рабочая функция, которая преобразовывает байтовые массивы в PSafeArray. Но она работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Создаем RESTful API с Laravel
Jason-Webb 28.04.2025
REST (Representational State Transfer) — это архитектурный стиль, который определяет набор принципов для создания веб-сервисов. Этот подход к построению API стал стандартом де-факто в современной. . .
Дженерики в C# - продвинутые техники
stackOverflow 28.04.2025
История дженериков началась с простой идеи — создать механизм для разработки типобезопасного кода без потери производительности. До их появления программисты использовали неуклюжие преобразования. . .
Тестирование в Python: PyTest, Mock и лучшие практики TDD
py-thonny 28.04.2025
Тестирование кода играет весомую роль в жизненном цикле разработки программного обеспечения. Для разработчиков Python существует богатый выбор инструментов, позволяющих создавать надёжные и. . .
Работа с PDF в Java с iText
Javaican 28.04.2025
Среди всех форматов PDF (Portable Document Format) заслуженно занимает особое место. Этот формат, созданный компанией Adobe, превратился в универсальный стандарт для обмена документами, не зависящий. . .
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru