您的位置:首页 > 编程语言 > VB

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

2013-07-01 19:32 597 查看
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控件,右边的下拉框里会显示出该控件所有的事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: