zoukankan      html  css  js  c++  java
  • 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

    5) 运行界面

  • 相关阅读:
    Gecko Bootloader的介绍(Silicon Labs)【一】
    使用模板新建ZigBee工程的方法
    代码控制ZigBee网络密钥的生成
    Ubuntu20编译最新版Android源码教程
    C和C++常用代码片段整理
    Java易错的知识点整理
    仿IntelliJ Darcula的Swing主题FlatLaf使用方法
    PuTTYTabManager汉化版
    WinSCP整合SecureCRT打开终端
    异想家博客图片批量压缩程序
  • 原文地址:https://www.cnblogs.com/michaelxu/p/1700445.html
Copyright © 2011-2022 走看看