`

VB6 中如何访问C# Dll 中的方法、属性以及事件

    博客分类:
  • vb
 
阅读更多

VB6 中如何访问C# Dll 中的方法、属性以及事件

 

 


一个简单的例子实现VB6中访问C# dll中的方法、属性以及事件。


C# DLL


1) 要使得C# dll中的方法、属性以及事件在VB6中暴露出来,以便写代码方便,需要加入相应的接口


- 方法和属性的接口,本例中为IComInterOpClass



[Guid("12A7D9AE-B42F-4a91-9EEE-5E0951A552E2")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] publicinterface IComInterOpClass { //Methodstring SayHello(); //Propertystring Name { get; set; } }

- 事件的接口,本例中为IComInterOpEvent



[Guid("868FD423-2504-4f5c-AB47-9F2B7DB8ED2C")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] publicinterface IComInterOpEvent { void EventTest(string msg); }

 


2) 实现部分,注意事件的接口不需要继承,它是以Attribute的方式加入的。本例中的事件是用timer实现5秒钟触发一次。



namespace ComInterOpLibrary { publicdelegatevoid EventTestHandler(string message); [Guid("BA6DF62E-D59E-4e46-B2E6-F1CD990A1E18")] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfacesAttribute("ComInterOpLibrary.IComInterOpEvent")] [ProgId("ComInterOpClass")] publicclass ComInterOpClass : IComInterOpClass { private Timer myTimer =null; //Eventpublicevent EventTestHandler EventTest; //Propertypublicstring Name { get; set; } public ComInterOpClass() { myTimer =new Timer(5000); myTimer.AutoReset =true; myTimer.Enabled =true; myTimer.Elapsed +=new ElapsedEventHandler(myTimer_Elapsed); } void myTimer_Elapsed(object sender, ElapsedEventArgs e) { if (EventTest !=null) { EventTest("Good day!"); } } #region IComInterOpClass Members//Methodpublicstring SayHello() { return"Hello "+ Name; } #endregion } }

 


3) 至此,C# dll部分就完成了,最后记得将项目的Register for COM InterOp选上。


 


VB部分


 


1) 首先声明两个变量,一个是类的,一个是事件的。


 



Public obj As ComInterOpLibrary.ComInterOpClass PublicWithEvents objEvent As ComInterOpLibrary.ComInterOpClass '定义事件

 


 


2) 然后进行初始化,本例是放在Form Load的时候进行的。



PrivateSub Form_Load() Set obj =New ComInterOpLibrary.ComInterOpClass Set objEvent = obj End Sub

 


 


3) 调用属性和方法



Dim ret AsString"Call propertyobj.Name = txtName.Text "Call Methodret = obj.SayHello() lblShow.Caption = ret

 


 


4) 访问事件



PrivateSub objEvent_EventTest(ByVal msg AsString) "Call eventList1.AddItem msg End Sub
 
 
注意:方法的名称 _前面的objEvent就是程序开始部分定义的 public WithEvents 的变量名称,_后面EnevtTest就是事件的名称。
所有COM的事件都可以这样调用。
其实如果是控件的话,在VB代码编辑上方的左下拉列表里,选择该COM控件,右边的下拉框里会显示出该控件所有的事件。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics