Delphi的基本代码

时间:2009-11-20 10:33:13

标签: delphi openoffice.org variant basic

我正在努力解决以下问题:

目标是为openoffice参数化自动化服务器,我在Delphi中进行编程。

我想要翻译成Delphi代码的基本代码是:

Dim aProps(1) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "FilterName"
aProps(0).Value = "Text - txt - csv (StarCalc)"
aProps(1).Name = "FilterOptions"
aProps(1).Value = sFilterOptions

我在Delphi中的尝试看起来像

type TPrmRecord = packed Record  
                    Name : String;  
                    Value : String;  
                  End;

Var
  ooParams:Variant;
  MyData : TPrmRecord;
Begin
  ooParams:= VarArrayCreate([0, 1], varVariant);

  MyData.Name  := 'FilterName';
  MyData.Value := 'Text - txt - csv (StarCalc)';
  ooParams[0]  := MyData; 

  MyData.Name  := 'FilterOptions';
  MyData.Value := '59/44,34,ANSI,1,';
  ooParams[1]  := MyData;
End;

这不起作用是否有人建议如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

您的TPrmRecord类型不是OO.org所期望的类型。您不应该尝试编写自己的类型,而是使用OO.org公开的类型。

有一个用于Delphi的LPGL授权工具箱:Delphi OOo。在其中你会找到一个单元OOoTools.pas,它导出一个函数CreateUnoStruct()。使用此命令并传递'com.sun.star.beans.PropertyValue'作为结构的名称。您将获得一个Variant(或其中一组数组,具体取决于其他参数值),而不是TPrmRecord(如下所示,未经测试):

var
  Params: Variant;
begin
  Params := CreateUnoStruct('com.sun.star.beans.PropertyValue', 1);

  Params[0].Name  := 'FilterName';
  Params[0].Value := 'Text - txt - csv (StarCalc)';

  Params[1].Name  := 'FilterOptions';
  Params[1].Value := '59/44,34,ANSI,1,';
end;

答案 1 :(得分:1)

看起来好像你错过了COM类的创建,这类似于代码中的New com.sun.star.beans.PropertyValue行。

我怀疑你需要将类型库导入Delphi,它会为你提供模拟Basic行为所需的对象,属性和方法。

答案 2 :(得分:1)

以下是不使用Delphi OOo的直接Delphi代码:

uses comobj;

var
  OO_ServiceManager: OleVariant;
  FileParams: OleVariant;

begin
  OO_ServiceManager := CreateOleObject ('com.sun.star.ServiceManager');
  FileParams := VarArrayCreate([0, 1], varVariant);
  FileParams[0] := OO_ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  FileParams[0].Name := 'FilterName';
  FileParams[0].Value := 'Text - txt - csv (StarCalc)';
  FileParams[1] := OO_ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  FileParams[1].Name := 'FilterOptions';
  FileParams[1].Value := '59/44,34,ANSI,1,';
end;

答案 3 :(得分:0)

看看this Thread in the german Delphi-PRAXiS forums。有一个完整的delphi单元发布了一些OOo自动化。

答案 4 :(得分:-1)

使用

var
ooParams:array[0..1] of TPrmRecord;

delphi使用严格的类型转换,因此这会导致赋值错误。