VB6 中如何访问C# Dll 中的方法、属性以及事件
2013-07-01 19:32
597 查看
VB6 中如何访问C# Dll 中的方法、属性以及事件
一个简单的例子实现VB6中访问C# dll中的方法、属性以及事件。
C# DLL
1) 要使得C# dll中的方法、属性以及事件在VB6中暴露出来,以便写代码方便,需要加入相应的接口
- 方法和属性的接口,本例中为IComInterOpClass
- 事件的接口,本例中为IComInterOpEvent
2) 实现部分,注意事件的接口不需要继承,它是以Attribute的方式加入的。本例中的事件是用timer实现5秒钟触发一次。
3) 至此,C# dll部分就完成了,最后记得将项目的Register for COM InterOp选上。
VB部分
1) 首先声明两个变量,一个是类的,一个是事件的。
2) 然后进行初始化,本例是放在Form Load的时候进行的。
3) 调用属性和方法
4) 访问事件
一个简单的例子实现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控件,右边的下拉框里会显示出该控件所有的事件。
相关文章推荐
- VB6 中如何访问C# Dll 中的方法、属性以及事件
- layer如何关闭以及父页面如何访问IFRAME页面的JS方法属性
- c# 属性如何自定义,以及为什么要定义属性而不是直接访问公共字段
- [C#]如何访问及调用类中私有成员及方法
- 【C#基础】之WinForm窗体常用控件的属性、方法及事件简介 .
- 用C#生成Excel文件的方法,Excel.dll组件生成的方法和设置用ASP.NET操作访问权限
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- CLR如何调用虚方法、属性和事件
- c#引用.dll文件后,如何显示dll里方法的解释
- 如何创建自定义winForm控件 以及添加事件属性
- C#索引器与属性的区别,以及索引器使用方法
- datepicker 属性设置 以及方法和事件
- C#中如何使用头文件(xxxx.h),以及如何将头文件编译成动态链接库(DLL)
- c#如何取得事件注册的方法
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 理解对象以及对象的属性、方法、事件
- 在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法
- 获取对象的接口信息(方法/属性/事件)(VB6代码)
- unity3d 一个c#类如何调用另一个c#类中的属性和方法
- C#中,当声明类、方法、字段、属性等时,访问权限的说明。