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# ดำเนินการดังต่อไปนี้:
- ใน Visual c# .NET สร้างไลบรารีของระดับชั้นโครงการ
- เพิ่มการอ้างอิงไปยังไลบรารีชนิดที่ใช้IDTExtensibility2. แอสเซมบลี interop หลักสำหรับซึ่งมีอยู่แล้วภายใต้ชื่อextensibility.
- เพิ่มการอ้างอิงไปยังไลบรารีวัตถุ Microsoft Office แอสเซมบลี interop หลักสำหรับซึ่งมีอยู่แล้วภายใต้ชื่อOffice.
- สร้างคลาสที่สาธารณะในไลบรารีคลาสที่ใช้IDTExtensibility2.
- หลังจากการเป็นคลาส สร้างไลบรารี การลงทะเบียนในไลบรารี COM interop เมื่อต้องการทำเช่นนี้ สร้างรัดกุมชื่อแอสเซมบลีสำหรับไลบรารีคลาสนี้ และทำการลงทะเบียนไว้กับ COM interop คุณสามารถใช้ Regasm.exe การลงทะเบียนคอมโพเนนต์.NET สำหรับ COM interop
- สร้างรายการรีจิสทรีเพื่อให้โปรแกรมประยุกต์ Office รู้จัก และสามารถโหลดการเพิ่มไว้
คุณสามารถเลือกที่จะดำเนินการขั้นตอนเหล่านี้ทั้งหมด หรือคุณสามารถสร้างโครงการ.NET ชนิด
Addin ที่ใช้ร่วมกัน. ซึ่งเริ่มต้นตัวช่วย Extensibility ซึ่งช่วยคุณสร้างการ COM เพิ่มเข้าใน.NET
ตัวช่วยสร้างการ Extensibility สร้างเป็น Visual c# .NET โครงการไลบรารีคลาสพร้อมด้วยคำ
เชื่อมต่อคลาสที่ใช้นั้น
IDTExtensibility2อินเทอร์เฟซ รหัส skeleton ที่ใช้กับสมาชิกที่ว่างของ
IDTExtensibilityนอกจากนี้สร้างขึ้น โครงการนี้มีการอ้างอิงแอสเซมบลี Extensibility และ Office การตั้งค่าโครงสร้างของโครงการได้
ลงทะเบียนสำหรับ Interop COMเลือก แฟ้มคีย์ (.snk) ของแอสเซมบลีที่ถูกสร้างขึ้น และมีการอ้างอิงในนั้น
AssemblyKeyfileแอตทริบิวต์ใน Assemblyinfo.vb
พร้อมกับโครงการไลบรารีคลาส วิซาร์ดสร้างโครงการการตั้งค่าที่คุณสามารถใช้เพื่อปรับใช้ COM เพิ่มไว้บนคอมพิวเตอร์เครื่องอื่น คุณอาจลบโครงการนี้หากต้องการ
ตัวอย่างแต่ละขั้นตอน
- ในการแฟ้ม:คลิกที่เมนูใน Microsoft Visual Studio .NETใหม่แล้ว คลิกProject.
- ในการโครงการใหม่กล่องโต้ตอบกล่อง ขยายโครงการอื่นภายใต้ชนิดโครงการเลือกโครงการ extensibilityแล้ว เลือกนั้นใช้ร่วมกันเพิ่มไว้แม่แบบ:
- ประเภท:MyCOMAddinชื่อ ของการเพิ่ม-ใน'และ'แล้วคลิกตกลง.
- เมื่อตัวช่วยสร้างการ Extensibility ปรากฏ ทำตามขั้นตอนเหล่านี้:
- บนหน้า 1 การเลือกสร้างการเพิ่มเข้าโดยใช้ Visual c#แล้ว คลิกถัดไป.
- บนหน้า 2 เลือกโปรแกรมประยุกต์ต่อไปนี้ของโฮสต์ และคลิกถัดไป:
- Microsoft Word
- Microsoft PowerPoint
- Microsoft Outlook
- Microsoft Excel
- Microsoft Access
- บนหน้า 3 ชื่อและคำอธิบายสำหรับการเพิ่มเข้า และจากนั้น คลิกถัดไป.
หมายเหตุ:ชื่อและคำอธิบายของการเพิ่มไว้ปรากฏขึ้นในการCOM เพิ่มไว้กล่องโต้ตอบในโปรแกรมประยุกต์ของ Office
- บนหน้า 4 เลือกตัวเลือกที่พร้อมใช้งานทั้งหมด และคลิกถัดไป.
- คลิกเสร็จสิ้น.
- ในการProjectเมนู คลิกเพิ่มการอ้างอิง. คลิกSystem.Windows.Forms.DLLในรายการส่วนประกอบ คลิกเลือกแล้ว คลิกตกลง.
- เพิ่มต่อไปนี้ลงในรายการของ namespaces ในนั้นเชื่อมต่อคลาส:
- เพิ่มสมาชิกต่อไปนี้ไปเชื่อมต่อคลาส:
private CommandBarButton MyButton;
- ใช้รหัสสำหรับสมาชิกของ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"); }
- สร้าง และทดสอบการ COM add-in ที่ โดยให้ทำตามขั้นตอนต่อไปนี้::
- ในการการสร้างเมนู คลิกสร้างโซลูชัน. หมายเหตุลงที่ สร้างใน COM add-in ที่ทะเบียนคลา.NET ด้วย COM interop
- เริ่มโปรแกรมประยุกต์ของ Office ที่คุณเลือกเป็นโปรแกรมประยุกต์การโฮสต์สำหรับของคุณเพิ่มไว้ (ตัวอย่างเช่น Microsoft Word หรือ Microsoft Excel) อย่างใดอย่างหนึ่ง
- หลังจากเพิ่มเข้าได้เริ่มต้น การOnStartupCompleteเหตุการณ์ของการเพิ่มเข้าเป็น fired และคุณได้รับข้อความแสดงข้อความ ยกเลิกกล่องข้อความ โปรดสังเกตว่า การเพิ่มไว้เพิ่มปุ่มแบบกำหนดเองใหม่ ด้วยคำอธิบายเฉพาะ "ของฉันกำหนดเองปุ่ม" ไปยังแถบเครื่องมือมาตรฐาน
- คลิกปุ่มแบบกำหนดเองของฉัน. กระบวนการคลิกเหตุการณ์สำหรับปุ่มถูกจัดการ โดยการเพิ่มไว้ และคุณได้รับกล่องข้อความ ยกเลิกกล่องข้อความ
- ออกจากโปรแกรมประยุกต์ของ Office
- เมื่อคุณออกจากโปรแกรมประยุกต์OnBeginShutDownfires เหตุการณ์ และคุณได้รับข้อความ ยกเลิกกล่องข้อความสิ้นสุดการสาธิต
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนโปรแกรม COM เพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
190253
(http://support.microsoft.com/kb/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
| kbautomation kbhowtomaster kbmt KB302901 KbMtth |
แปลโดยคอมพิวเตอร์ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:
302901
(http://support.microsoft.com/kb/302901/en-us/
)