±¸¼º ¿ä¼Ò °³Ã¼ ¸ðµ¨(COM) Ŭ¶óÀÌ¾ðÆ® (°ü¸®µÇÁö ¾Ê´Â ÄÚµå) ¿¡¼ °ü¸®µÇ´Â À̺¥Æ®¸¦ ½ÌÅ©ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù ÀÌ ¹®¼¿¡¼´Â .NET Windows ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÒ ¶§. ¿¹¸¦ µé¾î, Internet Explorer¿¡¼ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¶§ COM Ŭ¶óÀÌ¾ðÆ®°¡ °ü¸®µÇ´Â À̺¥Æ®¸¦ ½ÌÅ©ÇÏ´Â.
¾µ COM¿¡¼ °ü¸®µÇ´Â Çü½ÄÀ» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Microsoft .NET Framework °³¹ßÀÚ °¡ÀÌµå ¼³¸í¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
¿ä±¸ »çÇ×
´ÙÀ½Àº ±ÇÀåµÇ´Â Çϵå¿þ¾î, ¼ÒÇÁÆ®¿þ¾î, ³×Æ®¿öÅ© ÀÎÇÁ¶ó ¹× ÇÊ¿äÇÑ ¼ºñ½º ÆÑÀÇ ¸ñ·ÏÀÔ´Ï´Ù.
- Microsoft Visual Studio .NET
- Microsoft Internet Explorer ¹öÀü 5.5 ÀÌ»óÀÌ (ÇÁ·Î±×·¡¹Ö)
Internet Explorer ½ºÅ©¸³Æ® À̺¥Æ® ½ÌÅ© ´Ü°è¸¦ °ü¸®
- »ç¿ëÀÚ ÁöÁ¤ Windows Forms ÄÁÆ®·ÑÀ» ¸¸µì´Ï´Ù.
- Microsoft Visual Studio .NET ½ÃÀÛÇϽʽÿÀ.
- ÆÄÀÏ ¸Þ´º¿¡¼ »õ·Î ¸¸µé±â¸¦ °¡¸®Å² ´ÙÀ½ ÇÁ·ÎÁ§Æ® ¸¦ Ŭ¸¯ÇϽʽÿÀ.
- »õ ÇÁ·ÎÁ§Æ® ´ëÈ »óÀÚÀÇ ÇÁ·ÎÁ§Æ® Çü½ÄVisual C# ÇÁ·ÎÁ§Æ® Ŭ¸¯ÇÑ ´ÙÀ½ ÅÛÇø´ ¿¡¼ Windows ÄÁÆ®·Ñ ¶óÀ̺귯¸® ¸¦ ´©¸¨´Ï´Ù.
- ³ëÃâµÇ¾î¾ß À̺¥Æ®¿¡ ´ëÇÑ ¿øº» ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇϽʽÿÀ.
- GuidAttribute Ŭ·¡½ºÀÇ ¼Ò½º ÀÎÅÍÆäÀ̽º¸¦ Ãß°¡ÇϽʽÿÀ. Guid À¯Çü¿¡ ÀûÇÕÇÑ »ý¼ºÀÚ Àμö·Î Ư¼º¿¡ Àü´ÞÇÏ´Â ¹®ÀÚ¿¿¡ ¼½ÄÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. Guidgen.exe¸¦ ÆÄÀÏÀ» »ç¿ëÇÏÁö ¾Ê´Â GUID¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
[GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]
public interface ControlEvents
{
// Insert code here.
}
- ¼Ò½º ÀÎÅÍÆäÀ̽º¸¦ COM IDispatch ÀÎÅÍÆäÀ̽º¿Í ³ëÃâÇÏ´Â InterfaceType Ư¼ºÀ» Ãß°¡ÇÏ¿©:
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ControlEvents
{
// Insert code here.
}
- ¸Þ¼µå ¶Ç´Â Çʵå´Â COM µð½ºÆÐÄ¡ ½Äº°ÀÚ (DISPID) ÁöÁ¤ÇÏ·Á¸é ¸ðµç ±¸¼º¿ø¿¡°Ô ¿øº» ÀÎÅÍÆäÀ̽º¿¡¼ DispIdAttribute Ãß°¡:
public interface ControlEvents
{
[DispIdAttribute(0x60020000)]
void ClickEvent(int x, int y);
}
- ¿øÇÏ´Â À̺¥Æ®¸¦ ³ëÃâÇÏ´Â ·¡ÇÎÇÏ´Â »õ À̺¥Æ® Çü½ÄÀ» ¸¸µì´Ï´Ù.
- »ç¿ëÀÚ ÁöÁ¤ Windows Forms ÄÁÆ®·ÑÀÇ ¼Ò½º ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϽʽÿÀ.
- COM À̺¥Æ® ¼Ò½º·Î ³ëÃâµÇ´Â ÀÎÅÍÆäÀ̽º ¸ñ·ÏÀ» ½Äº°ÇÒ ¼ö ÀÖ´Â ÄÁÆ®·Ñ¿¡ ComSourceInterfaces Ư¼º Ãß°¡:
[ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]
public class MyWindowControl : System.Windows.Forms.UserControl
{
// Insert code here.
}
- ÄÁÆ®·ÑÀ» µ¿Àû ¸µÅ© ¶óÀ̺귯¸®(DLL) ÆÄÀÏ·Î ÄÄÆÄÀÏÇϽʽÿÀ.
- À̺¥Æ®¸¦ ÈÄÅ©Çϰí HTML ÆäÀÌÁö¿¡ ½ºÅ©¸³Æ® ºí·ÏÀ» ¸¸µì´Ï´Ù. ¿¹¸¦ µé¾î,:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1' />
<HTML>
<HEAD>
<TITLE>Sink managed event in Internet Explorer</TITLE>
</HEAD>
<BODY>
<OBJECT id="ctrl" classid="YourDllName.dll#ActiveXSourcing.MyWindowControl">
</OBJECT>
<SCRIPT LANGUAGE="JScript">
function ctrl::ClickEvent(a,b)
{
alert("MyWindowControl_ClickEvent");
}
</SCRIPT>
</BODY>
</HTML>
- ¸ðµç Ŭ¶óÀÌ¾ðÆ® ½Ã½ºÅÛ¿¡ (Mscorcfg.msc¸¦) .NET Framework ±¸¼º µµ±¸¸¦ »ç¿ëÇÏ¿© ¾î¼Àºí¸®¿¡ ÇÊ¿äÇÑ °³º° »ç¿ë ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù.
ÄÚµå ¸ñ·Ï ¿Ï·á
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace ActiveXSourcing
{
public delegate void ClickEventHandler(int x, int y);
//Source interface for events to be exposed.
//Add GuidAttribute to the source interface to supply an explicit System.Guid.
//Add InterfaceTypeAttribute to indicate that interface is IDispatch interface.
[GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ControlEvents
//Add a DisIdAttribute to any members in the source
//interface to specify the COM DispId.
{
[DispIdAttribute(0x60020000)]
void ClickEvent(int x, int y);
}
//Add a ComSourceInterfaces attribute to the control to
//identify the list of interfaces that are exposed as COM event sources.
[ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]
public class MyWindowControl : System.Windows.Forms.UserControl
//, ComInteropControlInterface
{
System.Windows.Forms.TextBox tx = new TextBox();
private void InitializeComponent()
{
this.Name = "MyWindowControl";
}
event ActiveXSourcing.ClickEventHandler ClickEvent;
public MyWindowControl() : base()
{
initMyWindowControl();
}
private void initMyWindowControl()
{
Size = new System.Drawing.Size(300, 50);
tx.Text = "Click on the TextBox to invoke 'ClickEvent'";
tx.Size = this.Size;
tx.Click += new System.EventHandler(ClickHandler);
this.Controls.Add(tx);
}
private void ClickHandler(object sender, System.EventArgs e)
{
if (ClickEvent != null)
{
ClickEvent(0, 0);
}
}
}
}
ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Microsoft À¥ »çÀÌÆ®¸¦ ÂüÁ¶ÇϽʽÿÀ.
ÀÚ¼¼ÇÑ ³»¿ëÀº ¾Æ·¡ ¹®¼ ¹øÈ£¸¦ ´·¯ Microsoft ±â¼ú ÀÚ·á¿¡ ÀÖ´Â ¹®¼¸¦ Ŭ¸¯ÇϽʽÿÀ.
316510
(http://support.microsoft.com/kb/316510/EN-US/
)
BUG: Internet Explorer¿¡¼ À̺¥Æ® 󸮱⠻ç¿ëÇÏ¸é º¸¾È ¿¹¿Ü
±â¼ú ÀÚ·á: 313891 - ¸¶Áö¸· °ËÅä: 2007³â 5¿ù 17ÀÏ ¸ñ¿äÀÏ - ¼öÁ¤: 3.4
º» ¹®¼ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
- Microsoft Visual C# .NET 2002 Standard Edition
- Microsoft Internet Explorer 5.5
| kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtko |
±â°è ¹ø¿ªµÈ ¹®¼Áß¿ä: º» ¹®¼´Â Àü¹® ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ °ÍÀÌ ¾Æ´Ï¶ó Microsoft ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î·Î ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù. Microsoft´Â ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ ¹®¼ ¹× ±â°è ¹ø¿ªµÈ ¹®¼¸¦ ¸ðµÎ Á¦°øÇϹǷΠMicrosoft ±â¼ú ÀÚ·á¿¡ ÀÖ´Â ¸ðµç ¹®¼¸¦ Çѱ۷ΠÁ¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±â°è ¹ø¿ª ¹®¼°¡ Ç×»ó ¿Ïº®ÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. µû¶ó¼ ±â°è ¹ø¿ª ¹®¼¿¡´Â ¸¶Ä¡ ¿Ü±¹ÀÎÀÌ Çѱ¹¾î·Î ¸»ÇÒ ¶§ ½Ç¼ö¸¦ ÇÏ´Â °Íó·³ ¾îÈÖ, ±¸¹® ¶Ç´Â ¹®¹ý¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. Microsoft´Â ³»¿ë»óÀÇ ¿À¿ª ¶Ç´Â Microsoft °í°´ÀÌ ÀÌ·¯ÇÑ ¿À¿ªÀ» »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ºÎ Á¤È®¼º, ¿À·ù ¶Ç´Â ¼ÕÇØ¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. Microsoft´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÚÁÖ ¾÷µ¥ÀÌÆ®Çϰí ÀÖ½À´Ï´Ù.