Basic-Code zu Delphi
-
21-09-2019 - |
Frage
Ich bin mit dem folgenden kämpfen:
Das Ziel ist es, einen Automatisierungsserver für Openoffice parametrisieren und ich bin Programmierung in Delphi.
Das Stück des Basiscode ich in Delphi-Code zu übersetzen ist:
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
Mein Versuch in Delphi sieht aus wie
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;
Dies ist nicht funktioniert hat jemand einen Vorschlag, wie man das angehen?
Lösung
Ihr TPrmRecord
Typ ist nicht das, was OO.org erwartet. Sie sollten nicht versuchen, Ihre eigene Art zu schreiben, aber verwenden diejenigen, die OO.org aussetzt.
Es gibt eine LPGL lizenzierte Toolbox für Delphi: Delphi OOo . Darin finden Sie eine Einheit OOoTools.pas finden, die eine Funktion CreateUnoStruct()
exportiert. Verwenden Sie diese und 'com.sun.star.beans.PropertyValue'
wie der Name der Struktur übergeben. Sie erhalten eine Variant
(oder ein Array von denen, je nach dem anderen Parameterwert) zurück, dass Sie anstelle von TPrmRecord
verwenden können (so etwas wie die folgenden, nicht getestet):
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;
Andere Tipps
Es sieht aus, als ob Sie die Erstellung der COM-Klasse fehlen, die das Äquivalent der New com.sun.star.beans.PropertyValue
Zeile im Code sein würden.
Ich vermute, Sie benötigen die Typbibliothek in Delphi importieren, die Sie würde die Objekte, Eigenschaften und Methoden, die Sie das grundlegende Verhalten emulieren müssen.
Hier ist gerade Delphi-Code ohne Verwendung von Delphi OOo:
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;
Hier finden Sie aktuelle dieses Thema in dem Deutsch Delphi-PRAXiS Foren . Es gibt eine ganze delphi Einheit dabei einige OOo Automatisierung geschrieben.
Verwendung
var
ooParams:array[0..1] of TPrmRecord;
delphi verwendet strengen Typguss, so dass dies einen Zuordnungsfehler verursacht.