Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2008 09:36:46

dizzy1984
От:
Зарегистрирован: 2008-11-20
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование списка к VARIANT VT_ARRAY VT_R8

Есть функция, принимающая VARIANT типа VT_ARRAY VT_R8 - одномерный массив 8-ми байтовых вещественных чисел. Функция должна приводить к появлению изображения, но она просто возвращает False.
Вот сама функция

def AddBranch(self, Index=defaultNamedNotOptArg, Begin=defaultNamedNotOptArg, Points=defaultNamedNotOptArg):
"""Добавить ответвление."""
return self._oleobj_.InvokeTypes(10, LCID, 1, (11, 0), ((3, 1), (11, 1), (12, 1)),Index
, Begin, Points)
Вот способ ее вызова
iMarkOnLeader.AddBranch(0, True, [58, 189, 46, 189])
Вот работающий вариант на c++
#include "atlsafe.h"

VARIANT v;
V_VT(&v) = VT_ARRAY | VT_R8;
CComSafeArray<double> Points( 4 );
Points.SetAt(0, 58);
Points.SetAt(1, 189);

Points.SetAt(2, 46);
Points.SetAt(3, 189);

V_ARRAY(&v) = ( LPSAFEARRAY )Points;
VARIANT_BOOL tmp = iMarkOnLeader->AddBranch( 0, TRUE, v);
Вопрос - в какую структуру преобразуется ?
Можно ли явно создать VARIANT VT_ARRAY VT_R8 на питоне?



Офлайн

#2 Ноя. 21, 2008 01:44:17

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Преобразование списка к VARIANT VT_ARRAY VT_R8

Я за раздел для новичков! Пока не прочитал этот пост, сомневался, но сейчас понял… Надо!
Пойду-ка я во флейм… :-)



Офлайн

#3 Ноя. 21, 2008 01:56:12

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Преобразование списка к VARIANT VT_ARRAY VT_R8

dizzy1984, ты бы объяснил, что здесь используешь. А то я, например, не знаю что такое defaultNamedNotOptArg…



Офлайн

#4 Ноя. 21, 2008 07:22:38

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование списка к VARIANT VT_ARRAY VT_R8

dizzy1984, 18.11.2008, 12:48, post1701716
Извиняюсь за некоторую поспешность, постараюсь изложить подробнее.
Я пишу встраиваемую библиотеку для приложения Компас3D. У него есть automation com библиотека с помощью которой можно создавать объекты, менять их свойства и т.д. Как, к примеру, это можно сделать в excel. Все это оформляется в виде кода на питоне. Сейчас мне нужно написать код, в котором для создания объекта вызывается функция, принимающая переменную тип данных которой на c++ звучит как const _variant_t & , что есть обертка над виндовым VARIANT. Мой VARIANT это VARIANT VT_ARRAY VT_R8, т.е содержит в себе одномерный массив 8-байтовых действительных чисел. На питоне я писал совсем мало и сам язык я не знаю, но слышал что он умеет создавать VARIANT VT_ARRAY (он же SAFEARRAY) из своих родных типов. Например из списка.
Таким образом, я пытаюсь в качестве параметра в этой функции задать список и ожидаю преобразование оного в нужный мне VARIANT, скрывающий в себе массив. Однако получивши от ворот поворот, заглядываю в исходники и вижу что, в общем-то, тип-то указан как (12, 1), т.е как (VT_VARIANT, PARAMFLAG_FIN). Значит, питон может и не догадаться преобразовать именно к VT_VARIANT VT_ARRAY VT_R8. И конечно, если на языке было бы можно явно создать переменную данного типа, то такие сомнения бы отпали.
Вот пока так - на c++ аналогичный код работает, на питоне функция возвращает False.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version