VB6 プログラムから使用している COM Callable Wrapper がありますが、CCW が登録されていない限り、プログラムは COM イベントを受信しません。それ以外の場合、CCW は正常に動作します。プログラムのマニフェスト ファイルを削除し、「regasm /tlb /codebase theccw.dll」を使用して CCW を登録するまで、イベントは発生しません。これは 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();
}
ひとつ、わかったことがあります。TheComClass 内のパブリック イベント宣言に [ComVisible(true)] 属性がありません。物事が登録されたときにイベントを取得するので、それは問題ではないと思いますが、わかります...