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 被添加到工具箱组件中。我已经从 Windows 注销了这个 dll,并从注册表中删除了所有实例。我正在使用 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 回答