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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 10:36 11.06.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);
};



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

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

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

Тема Re: .NET Контрол като ActiveXнови [re: ДжypoCaймoнMизyнo]  
Автор ДжypoCaймoнMизyнo (ДжиЕсЕм)
Публикувано31.08.06 12:16



Къде сте дот-неткаджии?
Неможе да няма някой дето да може да се изкаже смислено и незаяждащо се по темата...!

Вече седмица кисне тая тема тука, хайде моля ви се дайте малко живец...

Проблема става много сериозен и аз все още не виждам решение. Да не говорим колко пъти питах вече чичко Гугъл и той най-накрая се отчая и не ми дава никаква нова информация вече...

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

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

Тема Re: .NET Контрол като ActiveXнови [re: ДжypoCaймoнMизyнo]  
Автор wqw (АзСъмЖив)
Публикувано11.09.06 17:39



Poor googling skillz!

Влачи:
-


- Търси

cheers,
</wqw>



Тема Re: .NET Контрол като ActiveXнови [re: wqw]  
Автор ДжypoCaймoнMизyнo (ДжиЕсЕм)
Публикувано14.09.06 18:24



Е благодаря,
макар и нелюбезно, все пак си ми дал нужната информация.

Хайде със Здраве.

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


Тема Re: .NET Контрол като ActiveXнови [re: ДжypoCaймoнMизyнo]  
Авторaa (Нерегистриран)
Публикувано25.09.06 17:01



аре не се прави, стига си рИвал у форума, .НЕТ-аджиите си имат друга работа освен да обръщат внимание на такива като тебе дет 1 седмица не могат да решат 1 проблем...




Всички темиСледваща тема*Кратък преглед
Клуб :  


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

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