1

.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 マシンでコンパイルします。

私は何が欠けていますか?

4

1 に答える 1

2

この行を変更してみてください

   public event TestEventHandler TestEvent;

   public event TestEventHandler Test;

これは、ソース インターフェイスのイベント メソッド定義と一致させるためです。次に、イベントを として起動しTest()ます。

于 2013-10-02T16:08:53.907 に答える