加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 08:11:17 所属栏目:百科 来源:网络整理
导读:VB6 中如何访问C# Dll 中的方法、属性以及事件 一个简单的例子实现VB6中访问C# dll中的方法、属性以及事件。 C# DLL 1) 要使得C# dll中的方法、属性以及事件在VB6中暴露出来,以便写代码方便,需要加入相应的接口 - 方法和属性的接口,本例中为IComInterOpCl

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



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


C# DLL


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


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



   
   
[Guid( " 12A7D9AE-B42F-4a91-9EEE-5E0951A552E2 " )] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IComInterOpClass { // Method string SayHello(); // Property string Name { get ; set ; } }


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



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



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



   
   
namespace ComInterOpLibrary { public delegate void EventTestHandler( string message); [Guid( " BA6DF62E-D59E-4e46-B2E6-F1CD990A1E18 " )] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfacesAttribute( " ComInterOpLibrary.IComInterOpEvent " )] [ProgId( " ComInterOpClass " )] public class ComInterOpClass : IComInterOpClass { private Timer myTimer = null ; // Event public event EventTestHandler EventTest; // Property public string 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 // Method public string SayHello() { return " Hello " + Name; } #endregion } }



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



VB部分



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




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




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



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




3) 调用属性和方法



   
   
Dim ret As String " Call property obj.Name = txtName.Text " Call Method ret = obj.SayHello() lblShow.Caption = ret




4) 访问事件



   
   
Private Sub objEvent_EventTest( ByVal msg As String ) " Call event List1.AddItem msg End Sub
以上代码摘自:http://www.sunnybtoc.com/page/M0/S228/228420.html
注意:方法的名称 _前面的objEvent就是程序开始部分定义的 public WithEvents 的变量名称,_后面EnevtTest就是事件的名称。
所有COM的事件都可以这样调用。
其实如果是控件的话,在VB代码编辑上方的左下拉列表里,选择该COM控件,右边的下拉框里会显示出该控件所有的事件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读