У меня есть COM Callable Wrapper, который я использую из программы VB6, но программа не будет получать события COM, если не зарегистрировано CCW. В противном случае CCW работает нормально, просто нет событий, пока я не удалю файл манифеста программы и зарегистрирую CCW, используя "regasm / tlb / codebase theccw.dll". Это в WinXP SP3.
В чем может быть проблема?
Возможно, мой CCW создан неправильно для использования в качестве объекта VB6 с "ранней привязкой". Вот мои декларации:
[ComVisible(false)]
public delegate void AnEventDelegate(int arg1);
[
ComVisible(true),
GuidAttribute("XXXX-XXXX-XXXX-XXXX"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)
]
public interface IComEvents
{
void AnEvent(int arg1);
}
[
ComVisible(true),
Guid("YYYY-YYYY-YYYY-YYYY"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IComEvents))
]
public class TheComClass: IComContract
{
public TheComClass(){}
// Implicit implementation of IComContract.
// Implicit implementation of IComEvents.
//
// eg. public event AnEventDelegate AnEvent;
}
[
ComVisible(true),
Guid("ZZZZ-ZZZZ-ZZZZ-ZZZZ")
]
public interface IComContract
{
[ComVisible(true)]
string AProp{ get; set; }
[ComVisible(true)]
void AMethod();
}
Одна вещь, которую я только что понял. У меня нет атрибутов [ComVisible (true)] в моих публичных объявлениях событий внутри TheComClass. Я не думаю, что это проблема, потому что я получаю события, когда вещь зарегистрирована, но посмотрим ...