Конференция "Corba" » Как передать динамический массив битмапов. [Delphi, Windows]
 
  • Дмитрий Белькевич © (02.04.07 15:07) [0]
    Нахожу примеры, как с помощью OLE передавать отдельные битмапы, но как передать несколько битмапов, заранее не зная их количество?
    И клинет и сервер - мои.
  • umbra © (02.04.07 15:53) [1]

    > как передать несколько битмапов, заранее не зная их количество?

    а как можно не знать количества? неужели нет никакого проверочного условия?
  • Дмитрий Белькевич © (02.04.07 16:06) [2]
    Клиентом дергается метод серверного интерфейса. Клиенту для сервера нужно передать несколько tbitmap. Заранее сказать (имеется в виду на этапе компиляции) невозможно. Т.е. в одном вызове метода может передаваться одна картинка, в следующем - 10. С одной картинкой всё просто - можно передать через параметр метода типа VARIANT (OleVariant), например, как массив байт - varByte (или как IPucture, не суть важно). Но как передать несколько картинок за один вызов - непонятно.
    Пробовал создать двумерный OleVariant с типом varByte. Потом не могу до него достучаться - VarArrayLock не лочится, т.к. вторая размерность - не varArray.
    Как создавать массив IPucture, не нашел. Вероятно, принципиально по-другому нужно делать. Как - не знаю.
  • Дмитрий Белькевич © (02.04.07 16:07) [3]
    >Заранее сказать (имеется в виду на этапе компиляции) невозможно.
    Читать: Заранее сказать сколько tbimap будет передаваться (имеется в виду на этапе компиляции) невозможно.
  • tesseract © (02.04.07 18:07) [4]

    > Читать: Заранее сказать сколько tbimap будет передаваться
    > (имеется в виду на этапе компиляции) невозможно.


    Делай интефейс - заведи метод Get/SetBitmapCount - и всё, никаких художеств. И в цикле шурши битмапами.
  • Дмитрий Белькевич © (02.04.07 22:33) [5]
    Передать количество битмапов не проблема. Можно и в том же методе того же интерфейса. Но как в пределах одного вызова одного метода переслать сразу много битмапов? Критично, что бы эти все битмапы были объединены одним вызовом - иначе я бы, конечно, последовательно их передавал.

    p.s. Спасибо за ответы.
  • atruhin © (03.04.07 04:57) [6]
    > можно передать через параметр метода типа VARIANT (OleVariant)
    > , например, как массив байт

    Ну а кто мешает как массив байт и передавать?
    1 байт - кол-во битмапов.
    2..XX - массив размеров или смещений битмапов (типа integer).
  • Дмитрий Белькевич © (03.04.07 11:12) [7]
    Да, я думал об этом. Хочется более красивое решение. Нашел IStorage. Возможно, это будет как раз оно...
  • Дмитрий Белькевич © (03.04.07 22:26) [8]
    Посмотрел IStorage. Честно говоря, думал, что структуры в памяти хранятся, а потом в файл по надобности сбрасываются. Однако, оказалось, что система просто информацию в файл сбрасывает, что не дает мне преимуществ, т.к. как раз сохранять файлы и не хотелось.

    Всё таки, видимо, придется свою структуру передаваемого массива делать и передавать всё в одномерном массиве.
    Если еще будут идеи готов выслушать и спасибо за ответы.
 
Конференция "Corba" » Как передать динамический массив битмапов. [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0]