是否可以使用当前版本的Visual Studio创建可以在VBA项目中调用的ActiveX DLL?

时间:2018-03-03 07:29:35

标签: vba activex

使用适用于Microsoft Office 2000或Visual Studio 6(Visual Basic 6)的旧开发人员工具,可以创建可在VBA项目中引用和调用的ActiveX DLL。有没有办法使用最新的Visual Basic / VBA编码工具?

2 个答案:

答案 0 :(得分:0)

我自己不是专家,但这是一个让你入门的小例子。一个简单的DLL,用于计算在Visual Studio 2017中编写的两个数字的总和。

步骤:

1)创建一个类库项目。
2)在Assembly Information下,选择“Make assembly COM-Visible”。
3)在Build下,选择“Register for COM interop”。

ICalculator界面:

[Guid("097E4850-4880-45B8-A20E-AFECC5D11D44")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface ICalculator
{
    void Calculate(double number1, double number2);
}

ICalculatorEvents界面:

[Guid("A3C988C8-9DA8-4981-AC11-6653FDDA6B30")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface ICalculatorEvents
{
    void CalculationSuccessfull(double result);
}

Calculator类:

using System;
using System.Runtime.InteropServices;

namespace ComCalculator
{       
    public delegate void SuccessDelegate(double result);

    [Guid("79B9BB64-AA3A-4FBB-BAAA-0FAC448CC695")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(ICalculatorEvents))]
    [ComVisible(true)]
    public sealed class Calculator : ICalculator
    {
        public event SuccessDelegate CalculationSuccessfull = null;

        public Calculator()
        {
        }

        public void Calculate(double number1, double number2)
        {
            double _calc = 0;
            _calc = number1 + number2;
            OnSuccess(_calc);
        }

        private void OnSuccess(double result)
        {
            CalculationSuccessfull?.Invoke(result);
        }
    }
}

在VBA中:

Option Explicit

Private WithEvents objCalc As ComCalculator.Calculator

Private Sub Calculate()

    Set objCalc = New Calculator
    objCalc.Calculate 7, 5
End Sub

Private Sub objCalc_CalculationSuccessfull(ByVal result As Double)
    Debug.Print result
End Sub

'Output: 12

注意:

您需要以管理员身份运行Visual Studio。

答案 1 :(得分:-1)

是的,看起来是这样。

我用Google搜索“Create ActiveX DLL”,第一个是关于如何使用Visual Studio 6创建ActiveX DLL(名为ThingDemo.DLL)的Microsoft教程。

example

也有很多其他好的链接。