Совместное использование функций System.Math с VBA Excel с использованием библиотеки VB. NET - PullRequest
0 голосов
/ 16 января 2020

Я пишу некоторые геометрические математические функции, используя VB. NET (VS 2015) для создания DLL (geoMath.DLL), включая System.Math. Я могу без проблем собрать DLL и использовать эти функции в VBA Excel.

Я хочу сделать функции System.Math также доступными для кода VBA, ссылаясь только на geoMath.DLL. Я могу использовать Math внутри классов, например x = Math.Sign (y), но не могу видеть функции Math в коде vba.

Вопрос: Как я могу поделиться функциями System.Math с vba, используя мою пользовательскую DLL?

VB. NET code

Option Strict Off
Option Explicit On

Imports System.Math

Namespace Mat
    Partial Public Class geoMathmatica

    Public mathNET as System.Math

......



1 Ответ

1 голос
/ 16 января 2020

Создайте методы в вашей DLL, которые имитируют c функции System.Math.

Public Class MyDLL
    Public Shared Function Sin(AngleInRadians As Double) As Double
        Return System.Math.Sin(AngleInRadians)
    End Function
End Class

edit: Макс. С использованием объектов

Public Shared Function Max(val1 As Object, val2 As Object) As Object
    'tested with
    '  Dim ii As Integer = CInt(MyDLL.Max(7I, 2I))
    '  Dim dd As Double = CDbl(MyDLL.Max(7.3R, 2.42R))

    Select Case True
        Case TypeOf val1 Is Double
            Return System.Math.Max(DirectCast(val1, Double), DirectCast(val2, Double))
        Case TypeOf val1 Is Integer
            Return System.Math.Max(DirectCast(val1, Integer), DirectCast(val2, Integer))
            'etc - add others
    End Select
End Function
...