Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог CString и GetBuffer() из VC++ в Builder-e 
V
    Опции темы
cyberstream
Дата 1.11.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

{
 [color=crimson]CString[/color]    strType, strValue, DisplayName;
 LPTSTR    Buffer;  
 int  BufferSize = MAX_PATH + MAX_DEVICE_ID_LEN; 
 ULONG  BufferLen = BufferSize * sizeof(TCHAR);  
 Buffer  = strValue.[color=crimson]GetBuffer[/color](BufferSize);
....
}

Чем заменить CString и GetBuffer()?
Я пробовал АnsiString и без GetBuffer() - приложение работает  некорректно  smile 


--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
_hunter
Дата 1.11.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



можеш использовать data


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cyberstream
Дата 2.11.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(_hunter @  1.11.2006,  14:25 Найти цитируемый пост)
можеш использовать data

То есть ???  AnsiString::data ??? И далее ?? А куда лепить GetBuffer() ? Или без GetBuffer() ? Примерчик можно ?


--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
_hunter
Дата 2.11.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(cyberstream @  2.11.2006,  10:16 Найти цитируемый пост)
То есть ???  AnsiString::data

да

Цитата(cyberstream @  2.11.2006,  10:16 Найти цитируемый пост)
 А куда лепить GetBuffer()

никуда

Цитата(cyberstream @  2.11.2006,  10:16 Найти цитируемый пост)
Или без GetBuffer() ?

таки да

Цитата(cyberstream @  2.11.2006,  10:16 Найти цитируемый пост)
Примерчик можно ?

примерчик есть в хелпе


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cyberstream
Дата 3.11.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Исходная функция
Код

{
    СString   strType, strValue, DisplayName;
    LPTSTR    Buffer;
    int  BufferSize = MAX_PATH + MAX_DEVICE_ID_LEN;
    ULONG  BufferLen = BufferSize * sizeof(TCHAR);

    Buffer  = (strValue).GetBuffer(BufferSize);
    if (CR_SUCCESS ==
    CM_Get_DevNode_Registry_Property_Ex(DevNode, CM_DRP_FRIENDLYNAME, NULL,
        Buffer, &BufferLen, 0, m_hMachine)
       )
    {   DisplayName = Buffer;    }
    else
    {   BufferLen = BufferSize * sizeof(TCHAR);
        if (CR_SUCCESS ==
        CM_Get_DevNode_Registry_Property_Ex(DevNode, CM_DRP_DEVICEDESC, NULL,
            Buffer, &BufferLen, 0, m_hMachine)
           )
        {   DisplayName = Buffer;   }
    else
    {   DisplayName=("Unknown Device");  }
    }
    return DisplayName;
}


Описание ф-ии в 
Код

DWORD CM_Get_DevNode_Registry_Property_Ex(
             IN  DEVINST    dnDevInst,
             IN  ULONG       ulProperty,
             OUT PULONG   pulRegDataType,   OPTIONAL
             OUT PVOID      Buffer,           OPTIONAL
             IN  OUT PULONG  pulLength,
             IN  ULONG       ulFlags,
             IN  HMACHINE hMachine
             );


Я понимаю, что в Buffer возвращается некое значение и перед вызовом CM_Get_DevNode_Registry_Property_Ex нужно этому Buffer-у чё-нить зарезервировать? 
Что следует писать? Всего лишь подставлять strValue.data() вместо Buffer ? BCB ругается cannot convert 'const void *' to 'void*' 

--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
cyberstream
Дата 10.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем, разобрались сами. Жаль только, что было это долго, и не уложились в срок.  А написать требовалось всего-то
Код

     LPTSTR    Buffer;
     Buffer= new char[BufferLen];

А вот как написать используя AnsiString::data - не представляю smile . _hunter , объяснишь мне это языком C++Builder, please ?
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
_hunter
Дата 10.11.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



простите, но если Вам нужно было то, что вы написали -- я вообще не представляю при чем тут GetBuffer()...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cyberstream
Дата 11.11.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Насколько я понял, GetBuffer() резервировал память указанной размерности  для указателя Buffer, который передавался в CM_Get_DevNode_Registry_Property_Ex. Если не резервировать ничего или недостаточно - ожидаемого не получим.
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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