วิธีการสร้างการ Office COM add-in ที่ โดยใช้ Visual .NET c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 302901 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

Microsoft Office XP, Microsoft Office 2003 และ Microsoft Office 2007 สนับสนุนสถาปัตยกรรมของตัวออกแบบเดียวสำหรับการสร้างโปรแกรมประยุกต์เพิ่มเติม เพื่อเพิ่มประสิทธิภาพ และควบคุมโปรแกรมประยุกต์ Office โปรแกรมเหล่านี้เพิ่มเติมจะเรียกว่าแบบจำลองวัตถุคอมโพเนนต์ของ Microsoft (COM) คงคลังที่เพิ่มขึ้น บทความที่มีการทีละขั้นตอนนี้อธิบายเกี่ยวกับโปรแกรม Office COM เพิ่มเติม และอธิบายถึงวิธีการสร้างข้อ Office COM add-in ที่ โดยใช้ Microsoft Visual c# .NET

อินเทอร์เฟซ IDTExensibility2

มี COM add-in ที่นี่เป็นเซิร์ฟเวอร์ COM ในการประมวลผล หรือรา ActiveX เชื่อมโยงแบบไดนามิกรี (DLL), ที่ใช้นั้นIDTExensibility2อินเทอร์เฟซตามที่อธิบายไว้ในไลบรารีของชนิด Microsoft เพิ่มในโปรแกรมออก (Msaddndr.dll) สืบทอดมาจากอินเทอร์เฟซนี้ และต้องปฏิบัติตามวิธีที่ 5 ของแต่ละโปรแกรมทั้งหมด COM เพิ่มเติม

OnConnection

กระบวนการOnConnectionเหตุการณ์ fires ทุกครั้ง COM add-in ที่มีการเชื่อมต่อ การเพิ่มเข้าอาจอย่างง่ายมีการเชื่อมต่อเมื่อเริ่มต้น โดยผู้ใช้ หรือผ่าน ทางการทำงานอัตโนมัติ ถ้าการOnConnectionเหตุการณ์กลับเสร็จเรียบร้อยแล้ว การเพิ่มเข้าเป็น said เพื่อให้สามารถโหลด ถ้ามีการส่งคืนข้อผิดพลาด แอพลิเคชันโฮสต์ออกของการอ้างอิงไปเพิ่มเข้าในทันที และวัตถุถูกทำลาย

กระบวนการOnConnectionเหตุการณ์พารามิเตอร์ทั้งสี่ต่อไปนี้:
  • โปรแกรมประยุกต์: การอ้างอิงไปยังวัตถุโปรแกรมประยุกต์ของโฮสต์
  • ConnectMode: แบบค่าคงที่ระบุวิธีการเพิ่มไว้มีการเชื่อมต่อ การเพิ่มเข้าสามารถเชื่อมต่อด้วยวิธีการดังต่อไปนี้:
    • ext_cm_AfterStartup: เริ่มต้นการเพิ่มเป็นขึ้น โดยผู้ใช้จากนั้นโปรแกรม COM เพิ่มเติมกล่องโต้ตอบ
    • ext_cm_CommandLine: การเพิ่มไว้มีการเชื่อมต่อจากบรรทัดคำสั่ง โปรดสังเกตว่า นี้ไม่สามารถใช้ในการสร้างโปรแกรม COM เพิ่มเติมสำหรับโปรแกรมประยุกต์ Office
    • ext_cm_External: เชื่อมต่อการเพิ่มเป็นอยู่ โดยโปรแกรมประยุกต์ภายนอกโดยอัตโนมัติ โปรดสังเกตว่า นี้ไม่สามารถใช้ในการสร้างโปรแกรม COM เพิ่มเติมสำหรับ Office แอปพลิเคชัน
    • ext_cm_Startup: เริ่มต้นการเพิ่มเข้าขึ้น โดยการโฮสต์เมื่อเริ่มต้นโปรแกรมประยุกต์ ลักษณะการทำงานนี้ถูกควบคุม โดยการตั้งค่าในรีจิสทรี
  • AddInInst: การอ้างอิงไปยังCOMAddInวัตถุที่อ้างอิงถึงนี้ add-in ในที่นี้COMAddInsคอลเลกชันสำหรับแอพลิเคชันของโฮสต์
  • กำหนดเอง: อาร์เรย์ของตัวแปรพิมพ์ค่าที่สามารถเก็บข้อมูลที่กำหนดโดยผู้ใช้

OnDisconnection

กระบวนการOnDisconnectionเหตุการณ์ fires เมื่อการ COM add-in ที่ถูกตัด และเพียงแค่ ก่อนที่จะ unloads จากหน่วยความจำ การเพิ่มเข้าควรทำการล้างข้อมูลใด ๆ ของทรัพยากรในเหตุการณ์นี้ และคืนค่าการเปลี่ยนแปลงใด ๆ ที่ทำแอพพลิเคชันโฮสต์

กระบวนการOnDisconnectionเหตุการณ์สองพารามิเตอร์ต่อไปนี้:
  • RemoveMode: แบบค่าคงที่ระบุวิธีการเพิ่มไว้ถูกตัด การเพิ่มในสามารถถูกตัดด้วยวิธีการดังต่อไปนี้:
    • ext_dm_HostShutdown: ยกเลิกการเพิ่มเข้าเป็นต่อเมื่อปิดโปรแกรมประยุกต์โฮสต์
    • ext_dm_UserClosed: การเพิ่มไว้ถูกตัด โดยผู้ใช้หรือการทำงานอัตโนมัติตัวควบคุม
  • กำหนดเอง: อาร์เรย์ของตัวแปรพิมพ์ค่าที่สามารถเก็บข้อมูลที่กำหนดโดยผู้ใช้

OnAddInsUpdate

กระบวนการOnAddInsUpdateเหตุการณ์ fires เมื่อชุดของการลงทะเบียน COM คงคลังที่เพิ่มการเปลี่ยนแปลง ในอย่างอื่น ทุกครั้ง COM ถูกติดตั้ง หรือเอาออกจากโปรแกรมประยุกต์โฮสต์ เหตุการณ์นี้ fires

OnStartupComplete และ OnBeginShutdown

ทั้งสองแบบOnStartupCompleteวิธีการ และOnBeginShutdownมีเรียกวิธีเมื่อโปรแกรมประยุกต์โฮสต์ได้ออกจาก หรือมีการป้อนสถานะในผู้ที่ใช้โต้ตอบควรถูก avoided เนื่องจากโปรแกรมประยุกต์ไม่ว่างกำลังโหลด หรือ unloading เองจากหน่วยความจำ กระบวนการOnStartupCompleteมีเรียกวิธีก็ต่อเมื่อเชื่อมต่อเพิ่มเข้ามีอยู่ในระหว่างการเริ่มต้น และOnBeginShutdownมีเรียกวิธีเฉพาะในกรณีที่โฮสต์ disconnects เพิ่มเข้าในระหว่างการปิดระบบ

เนื่องจากอินเทอร์เฟซสำหรับผู้ใช้สำหรับโปรแกรมประยุกต์ของโฮสต์ทั้งหมดที่ใช้งานเมื่อดำเนินการเหตุการณ์เหล่านี้ เหล่านั้นอาจเป็นวิธีเดียวที่จะทำการดำเนินการบางอย่างที่มิฉะนั้น จะไม่พร้อมใช้งานจากนั้นOnConnectionเหตุการณ์และOnDisconnectionเหตุการณ์

COM add-in ที่ลงทะเบียน

นอกเหนือจากการลงทะเบียน COM ปกติ การ COM add-in ที่ต้องการในการลงทะเบียนตัวเอง ด้วยโปรแกรมประยุกต์ Office แต่ละที่จะรัน เมื่อต้องการลงทะเบียนตัวเอง ด้วยโปรแกรมประยุกต์ที่เฉพาะ การเพิ่มเข้าควรสร้างคีย์ย่อย การใช้ ProgID ของชื่อสำหรับคีย์ ภายใต้ตำแหน่งที่ตั้งต่อไปนี้:
HKEY_CURRENT_USER\Software\Microsoft\Office\ <officeapp> \Addins\ <progid></progid> </officeapp>
การเพิ่มในสามารถให้ค่าในตำแหน่งนี้คีย์สำหรับชื่อที่ใช้แสดงที่จำง่ายและคำอธิบายเต็ม นอกจากนี้ การเพิ่มเข้าควรระบุลักษณะการทำงานที่ต้องโหลดการ โดยใช้ค่า DWORD ที่ชื่อ LoadBehavior ค่านี้กำหนดวิธีการเพิ่มเข้าถูกโหลด โดยโปรแกรมประยุกต์โฮสต์ และจัดทำขึ้นของชุดของค่าต่อไปนี้:
  • 0 = Disconnect - ถูกโหลดไม่
  • 1 = Connected - ถูกโหลด
  • 2 = bootload - โหลดเมื่อเริ่มต้นโปรแกรมประยุกต์
  • 8 = demandLoad - โหลดเมื่อการร้องขอ โดยผู้ใช้
  • 16 = ConnectFirstTime - โหลดเพียงครั้งเดียว (ในการเริ่มต้นถัดไป)
ค่าทั่วไปที่ระบุถูก 0x03 (Connected | Bootload)

โปรแกรมเพิ่มเติมที่นำมาใช้IDTExtensibility2นอกจากนี้ควรระบุค่า DWORD ที่เรียกว่า
CommandLineSafe
เมื่อต้องการบ่งชี้ว่า เพิ่ม-คงคลังปลอดภัยสำหรับการดำเนินการที่ไม่สนับสนุนอินเทอร์เฟซของผู้ใช้ ค่าของ 0x00 บ่งชี้เท็จ และค่า 0x01 บ่งชี้ว่า True

วิธีการสร้างแบบ COM add-in ที่ โดยใช้ Visual .NET c#

ตามที่กล่าวถึงก่อนหน้า การ Office COM add-in ที่มี COM ในกระบวนการเซิร์ฟเวอร์ที่มีการเรียกใช้ โดยโปรแกรมประยุกต์ Office ผ่านเลเยอร์เวลารันของ COM ดังนั้น การพัฒนาแบบ COM add-in ใน.NET ต้องว่า ส่วนประกอบเพิ่มในถูกนำมาใช้ใน.NET และเปิดเผยไปยังไคลเอนต์ของ COM (นั่นคือ โปรแกรมประยุกต์ของ Office) ถึงชั้น interop COM

เมื่อต้องการสร้างแบบ COM add-in ที่ใน Visual .NET c# ดำเนินการดังต่อไปนี้:
  1. ใน Visual c# .NET สร้างไลบรารีของระดับชั้นโครงการ
  2. เพิ่มการอ้างอิงไปยังไลบรารีชนิดที่ใช้IDTExtensibility2. แอสเซมบลี interop หลักสำหรับซึ่งมีอยู่แล้วภายใต้ชื่อextensibility.
  3. เพิ่มการอ้างอิงไปยังไลบรารีวัตถุ Microsoft Office แอสเซมบลี interop หลักสำหรับซึ่งมีอยู่แล้วภายใต้ชื่อOffice.
  4. สร้างคลาสที่สาธารณะในไลบรารีคลาสที่ใช้IDTExtensibility2.
  5. หลังจากการเป็นคลาส สร้างไลบรารี การลงทะเบียนในไลบรารี COM interop เมื่อต้องการทำเช่นนี้ สร้างรัดกุมชื่อแอสเซมบลีสำหรับไลบรารีคลาสนี้ และทำการลงทะเบียนไว้กับ COM interop คุณสามารถใช้ Regasm.exe การลงทะเบียนคอมโพเนนต์.NET สำหรับ COM interop
  6. สร้างรายการรีจิสทรีเพื่อให้โปรแกรมประยุกต์ Office รู้จัก และสามารถโหลดการเพิ่มไว้
คุณสามารถเลือกที่จะดำเนินการขั้นตอนเหล่านี้ทั้งหมด หรือคุณสามารถสร้างโครงการ.NET ชนิดAddin ที่ใช้ร่วมกัน. ซึ่งเริ่มต้นตัวช่วย Extensibility ซึ่งช่วยคุณสร้างการ COM เพิ่มเข้าใน.NET

ตัวช่วยสร้างการ Extensibility สร้างเป็น Visual c# .NET โครงการไลบรารีคลาสพร้อมด้วยคำเชื่อมต่อคลาสที่ใช้นั้นIDTExtensibility2อินเทอร์เฟซ รหัส skeleton ที่ใช้กับสมาชิกที่ว่างของIDTExtensibilityนอกจากนี้สร้างขึ้น โครงการนี้มีการอ้างอิงแอสเซมบลี Extensibility และ Office การตั้งค่าโครงสร้างของโครงการได้ลงทะเบียนสำหรับ Interop COMเลือก แฟ้มคีย์ (.snk) ของแอสเซมบลีที่ถูกสร้างขึ้น และมีการอ้างอิงในนั้นAssemblyKeyfileแอตทริบิวต์ใน Assemblyinfo.vb

พร้อมกับโครงการไลบรารีคลาส วิซาร์ดสร้างโครงการการตั้งค่าที่คุณสามารถใช้เพื่อปรับใช้ COM เพิ่มไว้บนคอมพิวเตอร์เครื่องอื่น คุณอาจลบโครงการนี้หากต้องการ

ตัวอย่างแต่ละขั้นตอน

  1. ในการแฟ้ม:คลิกที่เมนูใน Microsoft Visual Studio .NETใหม่แล้ว คลิกProject.
  2. ในการโครงการใหม่กล่องโต้ตอบกล่อง ขยายโครงการอื่นภายใต้ชนิดโครงการเลือกโครงการ extensibilityแล้ว เลือกนั้นใช้ร่วมกันเพิ่มไว้แม่แบบ:
  3. ประเภท:MyCOMAddinชื่อ ของการเพิ่ม-ใน'และ'แล้วคลิกตกลง.
  4. เมื่อตัวช่วยสร้างการ Extensibility ปรากฏ ทำตามขั้นตอนเหล่านี้:
    1. บนหน้า 1 การเลือกสร้างการเพิ่มเข้าโดยใช้ Visual c#แล้ว คลิกถัดไป.
    2. บนหน้า 2 เลือกโปรแกรมประยุกต์ต่อไปนี้ของโฮสต์ และคลิกถัดไป:
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. บนหน้า 3 ชื่อและคำอธิบายสำหรับการเพิ่มเข้า และจากนั้น คลิกถัดไป.

      หมายเหตุ:ชื่อและคำอธิบายของการเพิ่มไว้ปรากฏขึ้นในการCOM เพิ่มไว้กล่องโต้ตอบในโปรแกรมประยุกต์ของ Office

    4. บนหน้า 4 เลือกตัวเลือกที่พร้อมใช้งานทั้งหมด และคลิกถัดไป.
    5. คลิกเสร็จสิ้น.
  5. ในการProjectเมนู คลิกเพิ่มการอ้างอิง. คลิกSystem.Windows.Forms.DLLในรายการส่วนประกอบ คลิกเลือกแล้ว คลิกตกลง.
  6. เพิ่มต่อไปนี้ลงในรายการของ namespaces ในนั้นเชื่อมต่อคลาส:
    using System.Reflection;
  7. เพิ่มสมาชิกต่อไปนี้ไปเชื่อมต่อคลาส:
    private CommandBarButton MyButton; 
  8. ใช้รหัสสำหรับสมาชิกของIDTExtensibility2ในการเชื่อมต่อคลา ดัง:
    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) {
       applicationObject = application;
       addInInstance = addInInst;
    
       if(connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
       {
          OnStartupComplete(ref custom);
       }
    
    }
    
    public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom) {
       if(disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown)
       {
          OnBeginShutdown(ref custom);
       }
       applicationObject = null;
    }
    
    
    public void OnAddInsUpdate(ref System.Array custom)
    {
    }
    
    public void OnStartupComplete(ref System.Array custom)
    {
       CommandBars oCommandBars;
       CommandBar oStandardBar;
    
       try
       {
       oCommandBars = (CommandBars)applicationObject.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty , null, applicationObject ,null);
       }
       catch(Exception)
       {
       // Outlook has the CommandBars collection on the Explorer object.
       object oActiveExplorer;
       oActiveExplorer= applicationObject.GetType().InvokeMember("ActiveExplorer",BindingFlags.GetProperty,null,applicationObject,null);
       oCommandBars= (CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars",BindingFlags.GetProperty,null,oActiveExplorer,null);
       }
    
       // Set up a custom button on the "Standard" commandbar.
       try
       {
       oStandardBar = oCommandBars["Standard"];        
       }
       catch(Exception)
       {
       // Access names its main toolbar Database.
       oStandardBar = oCommandBars["Database"];      
       }
    
       // In case the button was not deleted, use the exiting one.
       try
       {
       MyButton = (CommandBarButton)oStandardBar.Controls["My Custom Button"];
       }
       catch(Exception)
       {
          object omissing = System.Reflection.Missing.Value ;
          MyButton = (CommandBarButton) oStandardBar.Controls.Add(1, omissing , omissing , omissing , omissing);
          MyButton.Caption = "My Custom Button";
          MyButton.Style = MsoButtonStyle.msoButtonCaption;
       }
    
       // The following items are optional, but recommended. 
       //The Tag property lets you quickly find the control 
       //and helps MSO keep track of it when more than
       //one application window is visible. The property is required
       //by some Office applications and should be provided.
       MyButton.Tag = "My Custom Button";
    
       // The OnAction property is optional but recommended. 
       //It should be set to the ProgID of the add-in, so that if
       //the add-in is not loaded when a user presses the button,
       //MSO loads the add-in automatically and then raises
       //the Click event for the add-in to handle. 
       MyButton.OnAction = "!<MyCOMAddin.Connect>";
    
       MyButton.Visible = true;
       MyButton.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.MyButton_Click);
    
    
       object oName = applicationObject.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,applicationObject,null);
    
       // Display a simple message to show which application you started in.
       System.Windows.Forms.MessageBox.Show("This Addin is loaded by " + oName.ToString()   , "MyCOMAddin");
       oStandardBar = null;
       oCommandBars = null;
    }
    
    public void OnBeginShutdown(ref System.Array custom)
    {
       object omissing = System.Reflection.Missing.Value ;
       System.Windows.Forms.MessageBox.Show("MyCOMAddin Add-in is unloading.");
       MyButton.Delete(omissing);
       MyButton = null;
    }
    
    private void MyButton_Click(CommandBarButton cmdBarbutton,ref bool cancel) {
       System.Windows.Forms.MessageBox.Show("MyButton was Clicked","MyCOMAddin"); }
    					
  9. สร้าง และทดสอบการ COM add-in ที่ โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. ในการการสร้างเมนู คลิกสร้างโซลูชัน. หมายเหตุลงที่ สร้างใน COM add-in ที่ทะเบียนคลา.NET ด้วย COM interop
    2. เริ่มโปรแกรมประยุกต์ของ Office ที่คุณเลือกเป็นโปรแกรมประยุกต์การโฮสต์สำหรับของคุณเพิ่มไว้ (ตัวอย่างเช่น Microsoft Word หรือ Microsoft Excel) อย่างใดอย่างหนึ่ง
    3. หลังจากเพิ่มเข้าได้เริ่มต้น การOnStartupCompleteเหตุการณ์ของการเพิ่มเข้าเป็น fired และคุณได้รับข้อความแสดงข้อความ ยกเลิกกล่องข้อความ โปรดสังเกตว่า การเพิ่มไว้เพิ่มปุ่มแบบกำหนดเองใหม่ ด้วยคำอธิบายเฉพาะ "ของฉันกำหนดเองปุ่ม" ไปยังแถบเครื่องมือมาตรฐาน
    4. คลิกปุ่มแบบกำหนดเองของฉัน. กระบวนการคลิกเหตุการณ์สำหรับปุ่มถูกจัดการ โดยการเพิ่มไว้ และคุณได้รับกล่องข้อความ ยกเลิกกล่องข้อความ
    5. ออกจากโปรแกรมประยุกต์ของ Office
    6. เมื่อคุณออกจากโปรแกรมประยุกต์OnBeginShutDownfires เหตุการณ์ และคุณได้รับข้อความ ยกเลิกกล่องข้อความสิ้นสุดการสาธิต

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนโปรแกรม COM เพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
190253ข้อมูล: สำหรับผู้ออกแบบ VB6 ไม่งานใน VB5

คุณสมบัติ

หมายเลขบทความ (Article ID): 302901 - รีวิวครั้งสุดท้าย: 10 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
Keywords: 
kbautomation kbhowtomaster kbmt KB302901 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:302901

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com