none
AccessViolationException при попытке вызова функции ConnectedShapes у Shape Object Visio. RRS feed

  • Вопрос

  • Занимаюсь разработкой приложения на C# и WPF. Необходимо обойти граф нарисованный в Visio. 

    Открываю шаблон.

     if (File.Exists(docPath))
                {               
                    this.host.Child = this.visioControl; //привязываю visio контрол к <WindowsFormsHost  Name="host"/>
                    visioControl.Window.Application.Documents.Add(mPath + docPath);               
                }
                else
                {
                    MessageBox.Show("Шаблон не найден");
                }   
    

    Затем рисую граф и вызываю функцию взятую из примеров кода Microsoft Visio 2010 SDK передавая ей текущую страницу visioControl.Window.Application.ActivePage

    public bool DemoFindConnectedGraphs(Microsoft.Office.Interop.Visio.Page pageToSearch)
            {
                int[] incomingShapeIDs;
                int[] outgoingShapeIDs;
    
                if (pageToSearch == null)
                {
                    return false;
                }
    
                try
                {
                    // Initialize shape graph
                    processedShapeIDs = new System.Collections.Generic.List<int>();
                    rootShapeIDs = new System.Collections.Generic.List<int>();
                    circuitShapeIDs = new System.Collections.Generic.List<int>();
                    queuedShapeIDs = new System.Collections.Generic.Queue<int>();
                    
                    pageShapes = pageToSearch.Shapes;
                    // Iterate through shapes on the page looking for shapes with 
                    // only outgoing connectors
                    foreach (Microsoft.Office.Interop.Visio.Shape currentShape in pageShapes)
                    {
                        // Find the 2D shapes on the page
                        if (currentShape.OneD == 0)
                        {
                            // Identify the shapes that are roots (no incoming 
                            // connections and at least one outgoing connection)
                            incomingShapeIDs =  (currentShape.ConnectedShapes(Microsoft.Office.Interop.Visio.VisConnectedShapesFlags.visConnectedShapesIncomingNodes,""));
     // Здесь возникает эксэпшн                      
      // Also identify the shapes that are connected but not roots
                            outgoingShapeIDs = (currentShape.ConnectedShapes(Microsoft.Office.Interop.Visio.VisConnectedShapesFlags.visConnectedShapesOutgoingNodes, ""));
    
                            try
                            {
                                if (incomingShapeIDs.Length == 0)
                                {
                                    if (outgoingShapeIDs.Length > 0)
                                    {
                                        // Shape has no incoming connections and at 
                                        // least one outgoing connection; add to root 
                                        // queue for processing
                                        rootShapeIDs.Add(currentShape.ID);
                                    }
                                }
                                else if (outgoingShapeIDs.Length > 0)
                                {
                                    // Shape has both incoming and outgoing 
                                    // connections; add to circuit queue for processing
                                    circuitShapeIDs.Add(currentShape.ID);
                                }
                            }
                            catch
                            {
                               
                            }
                        }
                    }
    
                    // Traverse the graph of each root shape found on the page
                    foreach (int rootShapeID in rootShapeIDs)
                    {
                        if (!processedShapeIDs.Contains(rootShapeID))
                        {
                            TraverseGraph(rootShapeID);
                        }
                    }
    
                    // Traverse the graph of each circuit shape found in pageShapes
                    System.Diagnostics.Debug.WriteLine("\nProcessing circuits");
                    foreach (int circuitShapeID in circuitShapeIDs)
                    {
                        if (!processedShapeIDs.Contains(circuitShapeID))
                        {
                            TraverseGraph(circuitShapeID);
                        }
                    }
                }
                catch (Exception err)
                {
                    System.Diagnostics.Debug.WriteLine(err.Message);
                    throw;
                }
                return true;
    
            }
    


    Причем эксэпшн возникает именно в вызове функции. Пробовал 

     foreach (Microsoft.Office.Interop.Visio.Shape test in x.Shapes)
                    {
                        test.ConnectedShapes(0, "");                                    
                    }
    
    то же самое происходит.

     

     

    24 ноября 2011 г. 13:06

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    15 декабря 2011 г. 8:58