Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SAFEARRAY 
V
    Опции темы
Irdis
Дата 28.4.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.5.2008

Репутация: нет
Всего: 1



Надо как-то запихнуть в структуру SAFEARRAY char*
и обратно  smile 
PM MAIL   Вверх
Acer
Дата 28.4.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Код

    SAFEARRAY arr;
    char data[] = "adsasdasdasd";
    arr.pvData = reinterpret_cast<void*>( data );
    char *str = reinterpret_cast<char*>( arr.pvData );

так?

Это сообщение отредактировал(а) Acer - 28.4.2009, 19:49
PM MAIL   Вверх
Irdis
Дата 28.4.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.5.2008

Репутация: нет
Всего: 1



ty

Это сообщение отредактировал(а) Irdis - 28.4.2009, 21:23
PM MAIL   Вверх
Irdis
Дата 28.4.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.5.2008

Репутация: нет
Всего: 1



Run-Time Check Failure #3 - The variable 'arr' is being used without being initialized.
Не сохраняется строка, видимо надо как-то его инициализировать и после этого пихать строку.
--------------------
а извлекает на ура

Это сообщение отредактировал(а) Irdis - 28.4.2009, 21:39
PM MAIL   Вверх
Andrey44
Дата 29.4.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Цитата(Acer @  28.4.2009,  19:46 Найти цитируемый пост)
Выделить всёкод C++
1:
2:
3:
4:
    
    SAFEARRAY arr;
    char data[] = "adsasdasdasd";
    arr.pvData = reinterpret_cast<void*>( data );
    char *str = reinterpret_cast<char*>( arr.pvData );

так?

Конечно не так!
Irdis, смотрите МСДН и функции для SAFEARRAY начиная с 
Код

SAFEARRAY* SafeArrayCreate(  
  VARTYPE  vt,                     
  unsigned int  cDims,             
  SAFEARRAYBOUND * rgsabound  
);
HRESULT SafeArrayRedim(  
  SAFEARRAY *psa,              
  SAFEARRAYBOUND *psaboundNew  
);


И дальше я думаю разберетесь.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Rififi
Дата 29.4.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Irdis
Код от Acer, - это отличный способ завалить программу. Может, ты ему чем насолил? user posted image
если не вдаваться в технические подробности правильной работы с safearray, то удобно использовать классы ATL:
Код
CComSafeSrray<BSTR> sa;
CComBSTR s = "zzz";

sa.Add(s);
SAFEARRAY* raw = sa.Detach()
если желаешь хардкодить - см. пост Andrey44
PM MAIL   Вверх
xvr
Дата 29.4.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



SAFEARRAY НЕ УМЕЕТ хранить ansi строки (char*), только BSTR (wchar_t*, к тому же специальным образом созданные). Конечно, если не интересуют последствия, то можно и char* туда запихнуть  smile 
PM MAIL   Вверх
Irdis
Дата 29.4.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.5.2008

Репутация: нет
Всего: 1



а мне не надо строки ansi  smile , надо в c# dll запихнуть byte[] который интерпретируется SafeArray(unsigned char), успехи в этом деле уже есть
 st3=SafeArrayCreateVector(VT_UI1,0,4); <-принимает

Это сообщение отредактировал(а) Irdis - 29.4.2009, 15:09
PM MAIL   Вверх
xvr
Дата 29.4.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Тогда так и надо писать - массив байтов. Ибо для подавляющего большинства программистов просто char* это именно ansi строка
Для байтов SafeArrayCreateVector(VT_UI1,0,<size>) это именно то, что надо


Это сообщение отредактировал(а) xvr - 29.4.2009, 15:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.