Форум сайта python.su
Есть функция, принимающая 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])
#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);
Офлайн
Я за раздел для новичков! Пока не прочитал этот пост, сомневался, но сейчас понял… Надо!
Пойду-ка я во флейм… :-)
Офлайн
dizzy1984, ты бы объяснил, что здесь используешь. А то я, например, не знаю что такое defaultNamedNotOptArg…
Офлайн
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.
Офлайн