اكتشاف تعليمات برمجية باستخدام نموذج تعليمات برمجية (Visual أساسى)

Visual Studioيقدم نموذج تعليمات برمجية auإلىmation العملاء القدرة على إلى لاكتشاف ملفات تعريف تعليمات برمجية في مشروع وتعديل عناصر تعليمات برمجية هذه. طراز تعليمات برمجية تلقائياً بتحديث الجميع الكائنات المشار إليه عند إجراء تعديلات في محرر البرنامج. على سبيل المثال، إذا قمت بالإشارة إلى كائن فئة مستخدم فيما بعد بإضافة وظيفة جديدة، هو lهوted بين الأعضاء. نموذج تعليمات برمجية تسمح للعملاء auإلىmation إلى تجنب تطبيق محلل ل Visual Studioاللغات في ترتيب إلى اكتشاف ملفات تعريف عالية المستوى في مشروع، مثل فئات وواجهات، بني، وظائف، الخصائص وهكذا.

Visual Studioتجنب نموذج تعليمات برمجية الأساسية اللغة-مناطق معينة من تعليمات برمجية، حيث لم، تشغيل سبيل المثال، توفر طراز كائن لعبارات في وظائف أو إعطاء تفاصيل كاملة تشغيل معلمات. من أجل المعلمات، كشف طراز تعليمات برمجية فقط نوع واسم معلمة وعدم وجود معلومات هو المتوفرة حول ما إذا كنت معلمة هو إدخال والإخراج، اختيارية وكذلك forth. Visual C++يقدم إصداراً موسعة من طراز تعليمات برمجية الأساسية هو المستهدفة باتجاهVisual C++مشاريع. للحصول على معلومات حول هذه المهمة، راجع نموذج التعليمات البرمجية لذ Visual C++‎.

فحص و ‏‏تحرير تعليمات برمجية باستخدام "نموذج تعليمات برمجية"

طراز تعليمات برمجية هو أساسا يستند إلى نص في تلك البرامج أو تعليمات برمجية في مشروع هو المخزنة في الملفات نصية. يمكنك العثور على تعليمات برمجية للمشروع باستخدام طراز المشروع إلى قم بزيارة كل عنصر مشروع، ومن ثم تحقق من إلى مما إذا كان عنصر المشروع يحتوي على تعليمات برمجية باستخدام FileCodeModel. إذا كان عنصر مشروع يحتوي على عناصر تعليمات برمجية ويمكن لتلك العناصر إرجاع الكائنات من ediإلىr ويمكن استخدام نموذج تعليمات برمجية الطراز auإلىmation ediإلىr النص إلى تعديل تعليمات برمجية أو القيام بتحليل المترجمة. باستخدام محرر كائن النموذج، يمكنك طلب عنصر تعليمات برمجية التي تحتوي على يؤشر الإدراج الخاصة بمحرر أو TextPointكائن في دالة أو فئة المستوى.

يؤشر الإدخال الأساسي على Visual Studioنموذج تعليمات برمجية الأساسية هو CodeModelالكائن. عامة على CodeElementsمجموعة هو المستخدمة في عدة أماكن في نموذج تعليمات برمجية. هناك هو كل CodeElementsالمستوى وعلى المستوى الفئة أو الواجهة الذي يرجع الأعضاء هذه الكائنات. كل عنصر من CodeElementsمجموعة CodeElement2الكائن، وبعضها CodeElement2يحتوي الكائن Kindالخاصية التي تعرف نوعها، سواء كان الفئة والواجهة، بنية، دالة، خاصية، متغير، وما إلى ذلك.

نماذج تعليمات برمجية الخاصة باللغة

Visual C++يوفر ملحق لنموذج تعليمات برمجية الأساسية للهدفVisual C++-رمز محدد. For example, if Language indicates that a given code element is a Visual C++ code model object, and Kind = vsCMElementClass, then you can choose to either QueryInterface (QI) for CodeClass from the Visual Studio code model or QI for VCCodeClass from the Visual C++ language-specific code model. للحصول تشغيل مزيد من المعلومات حول Visual C++-محدد تعليمات برمجية للطراز، راجع كيفية القيام بما يلي: التعامل مع تعليمات برمجية بواسطة باستخدام نموذج تعليمات برمجية C + + Visual أساسى (Visual أساسى)و نموذج التعليمات البرمجية لذ Visual C++‎.

الملاحظات الخاصة بنموذج تعليمات برمجية الأساسية Studio Visual Basic

  • فقط Visual C++تطبيق نموذج تعليمات برمجية بتنفيذ بناء خاصة باللغة لتطبيقات Microsoft Office 2010 Suite اللغة.

  • لا القيام بتنفيذ تطبيقات بعض اللغات بأكملها Visual Studioنموذج تعليمات برمجية. مواضيع التعليمات أشر الخروج استثناءات عند وجودها. معظم الاختلافات بين تطبيقات طراز تعليمات برمجية استحقاق إلى الاختلافات الوظيفية بين اللغات. على سبيل المثال، لا يمكنك إضافة الوظائف إلى CodeNamespaceالكائنات في Visual Basicأو #Visual Cلأن فقط Visual C++ملفات تعريف الدالة المستوى الأعلى الميزات.

الوصف

وهذا إضافة-في walks من خلال عناصر تعليمات برمجية المختلفة من Visual Studioالملف. لتشغيل المثال، يجب أن يكون لديك مصدر بيانات تعليمات برمجية ملف مفتوح في Visual Studioتعليمات برمجية. محرر للحصول على أكثر راجع معلومات حول كيفية تشغيل الأمثلة التالية، كيفية القيام بما يلي: ترجمة و تشغيل أمثلة تعليمات برمجية طراز كائن للتنفيذ التلقائي.

الرمز

' Add-in code.
Public Sub OnConnection(ByVal application As Object, ByVal _
 connectMode As ext_ConnectMode, ByVal addInInst As Object,  _
 ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    ' Pass the applicationObject member variable to the code example.
    OutlineCode(_applicationObject)
End Sub

Sub OutlineCode(ByVal dte As DTE2)
    Dim fileCM As FileCodeModel2 _
      = CType(dte.ActiveDocument.ProjectItem.FileCodeModel, _
      FileCodeModel2)
    Dim elts As CodeElements
    elts = fileCM.CodeElements
    Dim elt As CodeElement2
    Dim i As Integer
    MsgBox("About to walk top-level elements ...")
    For i = 1 To fileCM.CodeElements.Count
        elt = CType(elts.Item(i), CodeElement2)
        CollapseElt(elt, elts, i)
    Next
End Sub

Sub CollapseElt(ByVal elt As CodeElement2, ByVal elts As _
    CodeElements, ByVal loc As Long)
    Dim epStart As EditPoint2
    Dim epEnd As EditPoint2
    epStart = CType(elt.StartPoint.CreateEditPoint, EditPoint2)
    ' Do this since we move it later.
    epEnd = CType(elt.EndPoint.CreateEditPoint, EditPoint2)
    epStart.EndOfLine()
    If ((elt.IsCodeType) And (elt.Kind <> _
      vsCMElement.vsCMElementDelegate)) Then
        MsgBox("Got type but not a delegate, named : " & elt.Name)
        Dim ct As CodeType
        ct = CType(elt, CodeType)
        Dim mems As CodeElements
        mems = ct.Members
        MsgBox("Set mems = ct.members")
        Dim i As Integer
        For i = 1 To ct.Members.Count
            CollapseElt(CType(mems.Item(i), CodeElement2), mems, i)
        Next
    ElseIf (elt.Kind = vsCMElement.vsCMElementNamespace) Then
        MsgBox("Got a namespace, named: " & elt.Name)
        Dim cns As CodeNamespace
        cns = CType(elt, CodeNamespace)
        MsgBox("set cns = elt, named: " & cns.Name)

        Dim mems_vb As CodeElements
        mems_vb = cns.Members
        MsgBox("Got cns.members")
        Dim i As Integer

        For i = 1 To cns.Members.Count
            CollapseElt(CType(mems_vb.Item(i), CodeElement2),  _
              mems_vb, i)
        Next
    End If
End Sub

يمكن تغيير قيم عنصر نموذج تعليمات برمجية

كـ تسجيل قيم عناصر طراز تعليمات برمجية، مثل كـ clكـses بنيات، الدالات، السمات، مفوضين وما إلى ذلك، قد يتغير بعد إجراء أنواع معينة من عمليات التحرير. وبالتالي، لا تفترض ستظل قيم ثابتة.

إذا قمت بتعيين تعليمات برمجية عنصر الطراز إلى متغير محلي، على سبيل المثال، ثم قم بتعيين القيمة خاصية لهذا المتغير المحلي، فقد لا تتضمن متغير محلي صالح تعليمات برمجية عنصر الطراز عند الرجوع إليه لاحقاً. في الحقيقة، قد يحتوي أيضا على مختلف تعليمات برمجية عنصر الطراز.

خذ بعين الاعتبار فئة الذي يحتوي على دالة المسمى "MyFunction" الذي هو المعينة إلى CodeFunctionمتغير،، ثم Nameخاصية CodeFunctionهو تعيين إلى القيمة "YourFunction." بعد تعيين هذا المتغير، لم تعد ضمان الذي كان محلي متغير يمثل نفس CodeFunction. وبالتالي الوصول إلى القيمة خاصية قد ترجع E_FAIL كـ نتيجة.

هي الطريقة الموصى بها للتعامل مع th هو الموقف هو صراحة إعادة تعيين متغير محلي الخاص بك لعنصر طراز تعليمات برمجية الصحيحة قبل الوصول إلى قيم خصائصه. يوضح ما يلي مثالاً لكيفية إلى القيام بذلك. (الرمز هو في شكل إحدى الوظائف الإضافية.)

الوصف

Th هو الوظيفة الإضافية يوضح الطريقة الصحيحة للوصول إلى قيم CodeElements لذلك التي القيمة المناسبة هو التي تم استردادها. للحصول على أكثر راجع معلومات حول كيفية تشغيل الأمثلة التالية، كيفية القيام بما يلي: ترجمة و تشغيل أمثلة تعليمات برمجية طراز كائن للتنفيذ التلقائي.

الرمز

[Visual Basic]

Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    ReassignValue(_applicationObject)
End Sub

Sub ReassignValue(ByVal dte As DTE2)
    ' Before running, create a new Windows application project,
    ' and then add a function to it named MyFunction.
    Try
        Dim myFCM As FileCodeModel = _
          dte.ActiveDocument.ProjectItem.FileCodeModel
        ' Change the MyFunction name in Form1 class to
        ' the name, OtherFunction.
        Dim myClass1 As CodeClass = _
          CType(myFCM.CodeElements.Item("Form1"), CodeClass2)
        Dim myFunction As CodeFunction = _
          CType(myClass1.Members.Item("MyFunction"), CodeFunction2)
        myFunction.Name = "OtherFunction"
        myFunction = CType(myClass1.Members.Item("OtherFunction"), _
          CodeFunction2)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

[#C]

public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    ReassignValue(_applicationObject);
}

// Before running, create a new Windows application project,
// and then add a function to it named MyFunction.
public void ReassignValue(DTE2 dte)
{
    try
    {
        FileCodeModel myFCM = 
          dte.ActiveDocument.ProjectItem.FileCodeModel;
        // Change the MyFunction name in Form1 class to
        // the name, OtherFunction.
        CodeClass myClass1 = 
          (CodeClass2)myFCM.CodeElements.Item("Form1");
        CodeFunction myFunction = 
          (CodeFunction2)myClass1.Members.Item("MyFunction");
        myFunction.Name = "OtherFunction";
        myFunction = 
          (CodeFunction2)myClass1.Members.Item("OtherFunction");
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message);
    }
}

ملاحظة

تعيين خصائص التابعة عنصر (s) من نموذج تعليمات برمجية الخاصة بك عنصر لا يواجه هذه المشكلة. فقط تؤثر الخصائص مباشرة على CodeElement— مثل كـ اسم العنصر، ونوع دالة، وتوقيع الأسلوب، أو ما شابه -يواجه هذا سلوك غير محدداً.

وكذلك th هو المثال يعمل فقط إذا كانت الاسم الجديد ل CodeElementهو فريداً بين بين العناصر المشابهة له. Th هو هو لأن Itemخاصية بإرجاع التطابق أول، الذي لا يعمل لأساليب overloaded/خصائص أو فئات جزئي، أو مساحات الاسم بنفس الاسم.

راجع أيضًا:

المهام

كيفية القيام بما يلي: ترجمة تعليمات برمجية مثال لنموذج تعليمات برمجية C + + Visual Basic التوافق مع البرامج الخارجية

كيفية القيام بما يلي: قم بإنشاء إضافة-في

الإرشادات التفصيلية: إنشاء معالج

كيفية القيام بما يلي: التعامل مع تعليمات برمجية بواسطة باستخدام نموذج تعليمات برمجية C + + Visual Basic (Visual C#)

المبادئ

اكتشاف تعليمات برمجية بواسطة باستخدام نموذج تعليمات برمجية (Visual C#)

نموذج التعليمات البرمجية لذ Visual C++‎

مخطط نموذج كائن تلقائي

نموذج التعليمات البرمجية لذ Visual C++‎

موارد أخرى

إنشاء و التحكم في بيئة Windows

إنشاء إضافة-زر 'Ins' ومعالجات

التنفيذ التلقائي والمرجع الامتداد