.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 机器上编译。
我错过了什么?