.net コントロールが参照され、vb6 プロジェクトに追加されました。また、インターフェイスにあるイベントも表示されます。ただし、vb6 はイベントに登録されておらず、その理由がわかりません。私はこのテーマに関する数十の記事を読み、.Net Control/vb6 の動作中のコードを使用しました。これはイベントを使用した最初のラウンド ロビンなので、おそらく非常に小さいものが欠けていますが、コードは次のとおりです。
C#.NET
[ComVisible (true)]
[Guid(CustomerCreditControl.EventsId)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ICustomerCreditControlEvents
{
[DispId(1)]
void Test();
}
[ComVisible(true)]
[Guid(CustomerCreditControl.InterfaceId)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICustomerCreditControl
{
void SetAccount(string customerNumber, int generatorId);
string CreditHold { get; }
}
[ComVisible(true)]
[Guid(CustomerCreditControl.ClassId)]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(ICustomerCreditControlEvents))]
public partial class CustomerCreditControl : UserControl, ICustomerCreditControl
{
public delegate void TestEventHandler();
public event TestEventHandler TestEvent;
[ComRegisterFunction()]
private static void Register(Type t)
{
ComRegistration.RegisterControl(t, "");
}
[ComUnregisterFunction()]
private static void Unregister(Type t)
{
ComRegistration.UnregisterControl(t);
}
public CustomerCreditControl()
{
InitializeComponent();
}
public void SetAccount(string customerNumber, int generatorId)
{
_customer = RCI.DataAccess.DataFactory.Current.AccountService.GetCustomer(customerNumber.Trim());
SetAccount(_customer, generatorId);
}
public void btnNewSalesOrder_Click(object sender, EventArgs e)
{
if (TestEvent != null)
{
MessageBox.Show("Test Event Fired");
TestEvent();
}
else
MessageBox.Show("TestEvent = null");
string[] SOI = {"a","b","c"};
MessageBox.Show(SOI.ToString());
OnNewSalesOrder(ref SOI);
}
}
VB6
Private Sub customerCreditInfo_Test()
MsgBox "Test 2"
End Sub
vb6 コードはテスト イベントを認識しますが、イベントに登録しません。コントロールは vb6 フォームに配置されます。テストとして「MsgBox "Test 2"」があります。tlb はプロジェクトによって参照され、activeX がツールボックス コンポーネントに追加されます。この dll を Windows から登録解除し、すべてのインスタンスをレジストリから削除しました。regasm /register /codebase /tlb を使用してdllを登録しています。
Visual Studio 2008、.net 2.0 を使用し、Windows 7 マシンでコンパイルします。
私は何が欠けていますか?