2016-12-07 13 views
1

StarOffice Desktopオブジェクトのインスタンスを作成する際にいくつか問題があります。 私は以下の標準的な構成を使用しましたが、それは次の行に当てはまるときはいつも:StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop'); My StarDesktop Variantは未割り当てのままです。私は、コードがそこまでOKだと確信しているが、おそらくOpenOfficeのインストールで何かが台無しになっている。 は OpenOfficeデスクトップインスタンスを作成できません(comオブジェクト)

uses 
    ComObj; 

procedure OpenOfficeDocument; 
var 
    StarOffice: Variant; 
    StarDesktop: Variant; 
begin 
    StarOffice := CreateOleObject('com.sun.star.ServiceManager'); 
    StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop'); 
    // StarDesktop is always "unassigned" 
.... 

はい、私は知っている... COMオブジェクトをチェックする方法をありますか誰かが同じ問題を抱えていたし、それを解決することができました。私はそれが正しい環境で正常に動作することを100%確信していることを、より明確に述べたはずです。 しかし私の質問は、それがうまくいかない理由です。 'com.sun.star.frame.Desktop'インスタンスが割り当てられていない理由私はそれをデバッグするオプション/方法がありません... それは私に投票して少し不公平です、私はそれがうまくいかない理由を説明する何かを見つけることなく1時間のために研究した。 Officeのインストールに何か問題があるかどうかを確認する方法と、それをもう2度再インストールした場合 " もう一度、これは他の人にとってはうまくいくと思いますが、通常は私にとってはうまくいくはずです。 (...とないのコード例では)システムで間違っている可能性がどのような方向に私を指すようにいくつかの助けを知って

+0

StarSuiteのServiceManagerはCreateOleObject後に割り当てられます! – Niels

+1

plz質問を修正するためのコメントを使用しない - 質問を編集し、テキストを更新する。 –

+1

SysInternals Process Monitorを使用して、デスクトップを作成しようとしたときにどのレジストリキーファイルが試行され、どの結果が返されるかを確認することがあります。 –

答えて

1

をしたいと思いOpenOfficeのは、クライアントにインストールされている? 任意の例外をスローしないのですか?

私はBernard MarcellyDelphi 7 OOo toolを使用しています。そのようなコードを見ることができますが、

var 
    OpenOffice, StarDesktop: Variant; 

... 
    OpenOffice:= CreateOleObject('com.sun.star.ServiceManager'); 
    if isNullEmpty(OpenOffice) then Raise Exception.Create('OpenOffice connection is impossible'); 
    StarDesktop:= OpenOffice.createInstance('com.sun.star.frame.Desktop'); 
    if isNullEmpty(Result) then Raise Exception.Create(Format('Impossible to create service : %s', ['com.sun.star.frame.Desktop'])); 
... 

「という文字列に変換するいくつかの定数」

だから、StarDesktopが可能、nullの場合、ウーデスクトップサービスにアクセスすることはできません。 OpenOfficeが正しくインストールされていれば、いくつかの機能が欠けている可能性があります。オプションを設定する必要があります。

+0

私はお勧めします。 1-)OpenOfficeにインストールされている別のクライアントでコードを試してみてください。 2)あなたのクライアントで例を試してみてください。 あなたはあなたのPCに関する問題を理解することができますか? および 3 - オープンオフィスをアンインストールして、もう一度お試しください。症状が同じであれば(StarDesktopがnull)、あなたはインストールを疑うことができます(別のOpenOfficeをダウンロードできるかもしれません)。私はそれが解決ではないことを知っていますが、解決のために、誰かが答えを得るまで、少なくとも。 –

1
これは、(私のアプリケーションでは)私の作品

class procedure TOpenOffice.Connect; 
begin 
    if IsConnected then 
    Exit; 
    try 
    FServiceManager := CreateOleObject('com.sun.star.ServiceManager'); 
    except 
    FServiceManager := Null; 
    end; 
    if VarIsNull(FServiceManager) then 
    raise EOpenOfficeException.Create(StrConnectionFailed); 
    FDesktop := CreateService('com.sun.star.frame.Desktop'); 
    FDispatchHelper := CreateService('com.sun.star.frame.DispatchHelper'); 
    FIntrospection := CreateService('com.sun.star.beans.Introspection'); 
    FReflection := CreateService('com.sun.star.reflection.CoreReflection'); 
end; 

と:

class function TOpenOffice.CreateService(const ServiceName: string): Variant; 
begin 
    Result := FServiceManager.createInstance(ServiceName); 
    if VarIsNull(Result) then 
    raise EOpenOfficeException.CreateFmt(StrCouldNotCreateService,  
     [ServiceName]); 
end; 
関連する問題