• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

1С, Activex и Delphi: Доступ к элементу "Картинка".

  • Автор темы minister2007
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

minister2007

Помогите разобраться:

Создал на Delphi-7 ActiveX. Поместил его в 1Cv8 на форму.
Из модуля формы 1Сv8 вызываю мною созданный в ActiveX метод:

ЭлементыФормы.ЭлементУправления1.InfoPicture(ЭлементыФормы.ПолеКартинки1.Картинк
а.ПолучитьДвоичныеДанные());

В Delphi метод объявил так:

procedure InfoPicture(vParam :Variant);

Мне надо обратиться к графическому содержимому Картинки (а'ля Canvas).

Тип по i := VarType(vBin); получается - varDispatch - "Ссылка на Automation-объект (интерфейсный указатель IDispatch)".

Мои попытки преобразовать Variant к типу TBitmap не увенчались успехом.
Не знаю как к нему, этому vParam, подступиться. Кто подскажет?
 
M

minister2007

Продвинулся так:
в 1С добавил предварительную сериализацию. Получилось вот что:

// Сериализация объекта: выгрузка объекта в XML строку
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML,ЭлементыФормы.ОбъектИзображение.Картинка.ПолучитьДвоичныеД
анные());

ЭлементыФормы.лементУправления1.InfoPicture(ЗаписьXML.Закрыть());Далее в Delphi:

Декодирую входные данные с помощью своей функции:

ImageData := decodeBase64(vParam); // array of Byte;Теперь у меня в переменной - байт-массив Картинки. Проверял - вылитый BMP-файл.

Теперь уперся, как обратиться к этой переменной, чтобы вытащить из нее Canvas или привести к типу TBitmap.

Кто подскажет, как загрузить BMP-файл из переменной?
 
Z

zubr

Передавай в переменной хендл канваса или битмапа.
Затем, к примеру, делаешь так:
Код:
var
Canvas:TCanvas;

Canvas:=TCanvas.Create;
Canvas.Handle:=HandleFromActivX;
Ну или имея хендл битмапа делаешь BitBlt.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!