2009-07-08 8 views
1

J'ai une application qui a sa propre base de données en tant que composant COM. J'ai besoin d'écrire une application qui lie dans une instance déjà en cours d'exécution pour cette base de données COM en utilisant C# afin que je puisse tweek les valeurs dans la base de données et voir comment ils affectent l'application.Comment accéder à un objet COM en cours d'exécution à l'aide de .NET Interop?

Dans le passé, j'ai écrit des applications similaires en utilisant Monikers.

Existe-t-il un moyen d'accéder à un composant COM prêt à fonctionner à partir d'une application .NET?

Répondre

3

Pour utiliser monikers dans .NET, vous pouvez vérifier Marshal.BindToMoniker qui appelle en interne la fonction BindToMoniker Win32:

void BindToMoniker() 
{ 
    string pptxFile; 
    PowerPoint.Presentation pptx; 

    pptx = (PowerPoint.Presentation)Marshal.BindToMoniker(pptxFile); 
    pptx.Application.Visible = Office.MsoTriState.msoTrue; 
} 

Une autre option est d'obtenir un pointeur IDispatch à partir d'une poignée de fenêtre à l'aide AccessibleObjectFromWindow (A échantillon complet est décrit dans this question):

// AccessibleObjectFromWindow gets the IDispatch pointer of an object 
// that supports IAccessible, which allows us to get to the native OM. 
[DllImport("Oleacc.dll")] 
private static extern int AccessibleObjectFromWindow(
    int hwnd, uint dwObjectID, 
    byte[] riid, 
    ref PowerPoint.DocumentWindow ptr); 

Le billet de blog suivant (liés à l'automatisation MS office) par Andrew Whitechapel pourrait également être une ressource utile sur la façon de créer et de récupérer COM obje .NET: TPP dans

Launching Office Apps Programmatically

Questions connexes