Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 15:30 19.05.24 
Клубове/ Компютри и Интернет / .NET Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема .NET Контрол като ActiveX
Автор ДжypoCaймoнMизyнo (ДжиЕсЕм)
Публикувано25.08.06 12:45  



Здравейте дот-нетаджии

Първо искам да се извиня за дългият постинг - има парчета код както и доста описания...

Имам си един дребен проблем, който обаче вече ми бърка някъде та се не трае... Искам контрол (UserControl) написан на .NET (.NET 2.0) да го interop-на до ActiveX за да може СОМ-клиент нормално да го ползва. Проблема е, че известните класови атрибути за interop-ване не генерират необходимите IDL/ODL атрибути в типовата библиотека (липсваt control и object атрибутите) и в крайна сметка regasm регистрира само interop-натите интерфейси без да каже, че те са едно цяло като ActiveX контрол. В следствие на това тоя .NET контрол се вижда само като такъв но не и като ActiveX. Отделните му интерфейси обаче са видими като Automation-интерфейси. Под отделни интерфейси имам предвид интерфейса на класа на контрола и диспач-интерфейса на ивентите.

Една забележка за парчетата код по-долу: ГУИД-етата са сменени от мен при пействането на кода тук, иначе си имат съвсем нормални и валидни стойности.

Ето част от декларацията на контрола...



public delegate void UserInteractionHandler();
public delegate void UserCommandHandler(string sCommand, long iCode);

[GuidAttribute("xxxxxxxx-yyyy-zzzz-0000-123456789012")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface SimpleUserControlServiceEvents
{
void UserInteraction();
void UserCommand(string sCommand, int iCode);
}

[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[AutomationProxyAttribute(true)]
[IDispatchImplAttribute(IDispatchImplType.InternalImpl)]
[ComSourceInterfacesAttribute("COMSimpleService.SimpleUserControlServiceEvents, COMLibrary")]
public class SimpleUserControlService : System.Windows.Forms.UserControl
{

public event UserInteractionHandler UserInteraction;
public event UserCommandHandler UserCommand;

......


А ето това е което се получава в тип-библиотеката след експорта и регистрацията...



[
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
version(1.0),
noncreatable,
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.UserInteractionHandler")
]
coclass UserInteractionHandler {
[default] interface _UserInteractionHandler;
interface _Delegate;
interface _Object;
interface ICloneable;
interface ISerializable;
};

[
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
version(1.0),
noncreatable,
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.UserCommandHandler")
]
coclass UserCommandHandler {
[default] interface _UserCommandHandler;
interface _Delegate;
interface _Object;
interface ICloneable;
interface ISerializable;
};

[
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
version(1.0),
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.SimpleUserControlServiceEvents")

]
dispinterface SimpleUserControlServiceEvents {
properties:
methods:
[id(0x60020000)]
void UserInteraction();
[id(0x60020001)]
void UserCommand(
[in] BSTR sCommand,
[in] long iCode);
};

[
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
version(1.0),
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.SimpleUserControlService")
]
coclass SimpleUserControlService {
[default] interface _SimpleUserControlService;
interface _Object;
interface IComponent;
interface IDisposable;
interface IPersist;
[default, source] dispinterface SimpleUserControlServiceEvents;
};



[
odl,
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
hidden,
dual,
oleautomation,
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.UserInteractionHandler")

]
interface _UserInteractionHandler : IDispatch {
};

[
odl,
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
hidden,
dual,
oleautomation,
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.UserCommandHandler")

]
interface _UserCommandHandler : IDispatch {
};

[
odl,
uuid(xxxxxxxx-yyyy-zzzz-0000-123456789012),
hidden,
dual,
nonextensible,
oleautomation,
custom({xxxxxxxx-yyyy-zzzz-0000-123456789012}, "COMSimpleService.SimpleUserControlService")

]
interface _SimpleUserControlService : IDispatch {
// ... тука са една тълпа пропертита и методи включени
// ... от самият базов клас UserControl
[id(0x60020129)]
HRESULT NotifyClient([in] long fWhichEvent);
[id(0x6002012a), propget]
HRESULT Command([out, retval] BSTR* pRetVal);
[id(0x6002012a), propput]
HRESULT Command([in] BSTR pRetVal);
[id(0x6002012c), propget]
HRESULT EnableUI([out, retval] long* pRetVal);
[id(0x6002012c), propput]
HRESULT EnableUI([in] long pRetVal);
};



Ще бъда много благодарен на всеки, който ми даде смислено, не-заяждащо се мнение, както разбира се и на всеки, който ми помогне с идея, линк, подсказка и т.н.

Мерси ви предварително.

Умри де ел'Ориго, слуга на капитана!

Цялата тема
ТемаАвторПубликувано
* .NET Контрол като ActiveX ДжypoCaймoнMизyнo   25.08.06 12:45
. * Re: .NET Контрол като ActiveX ДжypoCaймoнMизyнo   31.08.06 12:16
. * Re: .NET Контрол като ActiveX wqw   11.09.06 17:39
. * Re: .NET Контрол като ActiveX ДжypoCaймoнMизyнo   14.09.06 18:24
. * Re: .NET Контрол като ActiveX aa   25.09.06 17:01
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.