Одесса: °С (вода °С)
Киев: 7°С

Тема: Вопрос по VC++ и Net

Ответить в теме
Показано с 1 по 5 из 5
  1. Вверх #1
    Модератор
    Мистер Одесский Форум
    Аватар для maxx™
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    38
    Сообщений
    23,358
    Репутация
    6089

    По умолчанию Вопрос по VC++ и Net

    Есть такая проблемка - читаем из файла информацию, которая возвращается в виде указателя на буфер, этот буфер отображаем в TextBox'e для редактирования. Затем из TextBox'а нужно получить такой же буфер чтоб обновить информацию в файле.
    Собственно вопрос как проще всего из String^ получить буфер содержащий текст. Вот что получилось у меня и оно работает:
    Загрузка данных
    LPVOID lplpvImageInfo;
    OUT DWORD lpcbImageInfo;
    if (!WIMGetImageInformation( sWim, &lplpvImageInfo, &lpcbImageInfo)) {
    MessageBox::Show ("Error get image info");
    return;
    }
    String^ XMLStr = Marshal::PtrToStringUni((IntPtr)lplpvImageInfo);
    textBox1->Text = XMLStr;
    Выгрузка
    String^ XMLStr = textBox1->Text;
    array<unsigned char>^ ubuf = System::Text::Encoding::Unicode->GetBytes(XMLStr);
    int ssize = ubuf->Length;
    unsigned char* aa = (unsigned char*) malloc(ssize * sizeof(unsigned char));
    for(int i = 0; i < ssize; i++)
    aa[i] = ubuf[i];
    LPVOID lplpvImageInfo = aa;
    OUT DWORD lpcbImageInfo = ssize;
    if (!WIMSetImageInformation( sWim, lplpvImageInfo, lpcbImageInfo)) {
    MessageBox::Show ("Error save image info");
    return;
    }
    MessageBox::Show ("Saved");
    Нельзя ли как-то попроще получить из textBox1->Text требуемый указатель LPVOID lplpvImageInfo?
    Последний раз редактировалось maxx™; 21.03.2008 в 20:47.


  2. Вверх #2
    Постоялец форума Аватар для Яр
    Пол
    Мужской
    Адрес
    Odessa.Ua
    Возраст
    30
    Сообщений
    2,952
    Репутация
    148
    Как-то так:

    Код:
    using namespace System::Runtime::InteropServices;
    Код:
    String^ str = "string";
    const unsigned char* buf = 
            (const unsigned char*)(Marshal::StringToHGlobalAnsi(str)).ToPointer();
    ~ Motivation is what gets you started. Habit is what keeps you going.

  3. Вверх #3
    Модератор
    Мистер Одесский Форум
    Аватар для maxx™
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    38
    Сообщений
    23,358
    Репутация
    6089
    Цитата Сообщение от Яр Посмотреть сообщение
    Как-то так:
    В итоге получилось вот так:
    Код:
    String^ XMLStr = textBox1->Text;
    IntPtr pStr = Marshal::StringToBSTR(XMLStr);
    OUT DWORD ssize = System::Text::Encoding::Unicode->GetBytes(XMLStr)->Length;
    if (!WIMSetImageInformation( sWim, (LPVOID) pStr, ssize)) {
    	 MessageBox::Show ("Error save image info");
    	 return;
    }
    Остался только вопрос - правильно ли вычисляется размер массива.
    Я придумал 2 варианта:
    OUT DWORD ssize = System::Text::Encoding::Unicode->GetBytes(XMLStr)->Length;
    OUT DWORD ssize = XMLStr->Length * 2;
    Оба дают правильный результат, но будет ли так всегда?

  4. Вверх #4
    Постоялец форума Аватар для Guffy
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    43
    Сообщений
    1,364
    Репутация
    251
    Записей в дневнике
    3
    SysStringByteLen
    SysStringLen
    и не забываем Marshal.FreeBSTR
    Последний раз редактировалось Guffy; 23.03.2008 в 23:59.

  5. Вверх #5
    Посоветуйте , пожалуйста хорошую книжечку по VC++ и Net для самостоятельного изучения студентом ИКСа

    Спасибо .


Ответить в теме

Похожие темы

  1. Таирово.Net
    от -=GDS=- в разделе Интернет
    Ответов: 28
    Последнее сообщение: 29.08.2004, 15:56
  2. Windows .NET Release и Windows 2003 Server
    от Maks Nikitin в разделе Интернет :: технические вопросы
    Ответов: 0
    Последнее сообщение: 16.07.2004, 17:34
  3. Программинг под .net compact framework
    от Яр в разделе Программирование
    Ответов: 3
    Последнее сообщение: 14.06.2004, 02:19
  4. Ответов: 3
    Последнее сообщение: 01.03.2004, 09:27
  5. .NET Что за зверь?
    от Яр в разделе Программное обеспечение
    Ответов: 2
    Последнее сообщение: 31.01.2004, 14:40

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения