如何获得对象价值?

时间:2015-08-10 17:18:28

标签: c++ com

我的程序必须通过#import指令与另一个程序通信。它会创建一个新文档,并使用默认参数

在其上放置TextFrame
HRESULT hr = CoInitialize(NULL);
_ApplicationPtr myApp("InDesign.Application");

DocumentPtr myDoc = myApp->ActiveDocument;
PagePtr myPage = myDoc->Pages->Item[1L];
TextFramePtr myTextFrame = myPage->TextFrames->Add(); // create frame on Page
TextFramePtr myTextFrame_2 = myPage->TextFrames->Item[2L]; // Get second frame on Page;

TextFrame对象具有更改帧大小的方法GeometricBounds。这是我设置帧大小的代码:

double mySize[4] = {12.7, 12.7, 66.7, 83.2};
SAFEARRAY * Bound;
VARIANT Array;
Array.vt =   VT_ARRAY | VT_R8;
Bound = SafeArrayCreateVector(VT_R8, 1, 4); 
for (int i = 0; i < 4; i++)
{
long index = i + 1;
SafeArrayPutElement(Bound, &index, &mySize[i]); 
}
Array.parray = Bound; 
myTextFrame->GeometricBounds = Array;

这是我创建的框架,但是如何获得文档中已存在的另一个框架的大小?

属性GeometricBounds As Variant TextFrame的边界,不包括笔触宽度,格式为[y1,x1,y2,x2],它们给出边界框的左上角和右下角的坐标。作为4个单位(双打或字符串)的数组

TLB文件中方法的描述:

Frame : IDispatch
{
// Property data
__declspec(property(get=GetGeometricBounds,put=PutGeometricBounds))
_variant_t GeometricBounds;
...

// Methods: 
void PutGeometricBounds (
const _variant_t & _arg1 );
_variant_t GetGeometricBounds ( );
....
}

1 个答案:

答案 0 :(得分:0)

访问SAFEARRAY的元素是一个问题: