2016-12-07 4 views
1

J'ai des problèmes pour créer une instance de l'objet StarOffice Desktop. J'ai utilisé la construction standard ci-dessous, mais chaque fois qu'il s'agit de la ligne: StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop'); Ma variante StarDesktop reste non affectée. Je suis assez sûr que le code est correct jusqu'à ce que là, mais peut-être quelque chose avec l'installation OpenOffice est foiré. Y at-il un moyen de vérifier les objets com ou que quelqu'un a eu le même problème et pourrait le résoudre ...OpenOffice Desktop Instance ne peut pas être créé (objet 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" 
.... 

Oui, je sais. J'aurais dû dire plus clairement que je suis à 100% sûr que cela fonctionnerait normalement dans un environnement correct. Mais ma question est ce qui pourrait être la cause pourquoi cela ne fonctionne pas. Pourquoi l'instance 'com.sun.star.frame.Desktop' n'est pas affectée. Je n'ai pas d'option/moyen de le déboguer ... Et c'est un peu injuste de me rejeter, j'ai fait des recherches pendant une heure sans trouver quelque chose pour expliquer pourquoi ça ne pouvait pas fonctionner. Ou comment et où vérifier si quelque chose ne va pas avec l'installation Office (je l'ai désinstallé et réinstallé deux fois déjà " Encore une fois, je sais que cela fonctionnera pour les autres et normalement fonctionnerait pour moi, mais quelque chose ne va pas sur mon système je voudrais savoir d'aide pour me diriger dans la direction ce qui pourrait être mauvais dans le système (et non dans l'exemple de code ...)

+0

Le ServiceManager est attribué StarOffice après CreateOleObject! – Niels

+1

plz ne pas utiliser les commentaires pour corriger la question - éditer la question et mettre à jour le texte. –

+1

vous pouvez essayer SysInternals Process Monitor pour voir quels fichiers de clés de registre sont essayés et avec quels résultats lorsque vous essayez de créer le bureau –

Répondre

1

est OpenOffice installé sur le client? ne jette pas une exception?

J'utilise Bernard MarcellyDelphi 7 OOo tool et comme vous pouvez voir son code comme ça;

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'])); 
... 

'certaines constantes converties en chaîne'

Donc, si StarDesktop est nul, possible ne peut pas accéder Oo Service Bureau. Si OpenOffice est installé correctement certaines fonctionnalités peuvent être manquantes, les options doivent être définies.

+0

Je suggère; 1-) Essayez votre code sur un autre client installé par OpenOffice. 2-) Essayez nos exemples sur votre client. Donc, vous pouvez comprendre le problème de votre PC? et 3 - Désinstallez votre openoffice et réessayez. Si les symptômes sont les mêmes (StarDesktop est nul) vous pouvez suspecter votre installation (peut être vous pouvez télécharger une autre version d'OpenOffice) Je sais que ce n'est pas la solution mais pour résoudre, vous devriez réduire le cercle. Au moins jusqu'à ce que quelqu'un obtienne une réponse. –

1

Cela fonctionne pour moi (dans ma demande):

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; 

et:

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