Использование UserControl как ActiveX
От: x1 http://www.agpage.ru
Дата: 20.11.06 16:53
Оценка:
Надо получить доступ к UserControl как к компоненту ActiveX, всроив его в страницу html.

Создан Control со следующим кодом:

namespace KMC
{

[Guid("2840DD99-4747-404a-9929-37773840F080")]
public interface IKMControl
{

}

[Guid("3FC2FEE1-1153-4798-800E-288E64FA7B02"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface KMControlEvents
{

}

[Guid("402FCF87-8B9E-4389-BC48-08B4FCD85CB6"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(KMControlEvents))]
public partial class KMControl : UserControl, IKMControl
{
public KMControl()
{
InitializeComponent();
}

public void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello");
}
}
}

В свойствах проекта соит галочка Make Assembly COM Visible
Post-BuildeEvents:
$(TargetDir)gacutil.exe -i $(TargetPath) /silent
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm $(TargetPath) /regfile:$(TargetName).reg /silent
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm $(TargetPath) /codebase /tlb /silent

Пытаемся получить доступ через html:
<object id="Vasdfs" classid="KMControl.dll#KMC.KMControl" width="300" height="300" >
</object>
Пробовал так:
<object id="Vasdfs" classid="KMControl#KMC.KMControl" width="300" height="300" >
</object>
Не работает!!! Не могу понять, в чём дело. Сборка успешно регестрируется в GAC, генерится tlb, и в reg-файле есть строки:

[HKEY_CLASSES_ROOT\CLSID\{402FCF87-8B9E-4389-BC48-08B4FCD85CB6}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="KMC.KMControl"
"Assembly"="KMControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f92c5c71c3a08677"
"RuntimeVersion"="v2.0.50727"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.