Подключение DLL к VBA

Программирование на Visual Basic for Applications
MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Подключение DLL к VBA

Сообщение MAGRAV » 13.09.2013 (Пт) 5:49

Добрый день!
Создаю в VB .NET библиотеку DLL.

Код: Выделить всё
Public Class erunda
    Public Overloads Shared Sub AddNum(ByVal a() As Double, ByVal d() As Double, ByRef c As Double)
        Dim ff As Double
        ddd_q(d, ff)
        c = aaa_q(a) + ff
    End Sub
    Public Overloads Shared Function aaa_q(ByVal a() As Double) As Double
        Dim i As Integer
        aaa_q = 0
        For i = 1 To a(0)
            aaa_q = aaa_q + a(i)
        Next i
        Return aaa_q
    End Function
    Public Overloads Shared Sub ddd_q(ByVal d() As Double, ByRef ff As Double)
        Dim i As Integer
        ff = 0
        For i = 1 To d(0)
            ff = ff + d(i)
        Next i
    End Sub
End Class



Проверяю на работоспособность полученную библиотеку в другом проекте на VB .NET. Всё исправно.

Далее хочу ею воспользоваться из макроса VBA.
Регистрирую библиотеку в системе. Пишу к примеру такой код в макросе:
Public Declare PtrSafe Sub AddNum Lib "ClassLibrary1" (ByVal a As Double, ByVal d As Double, ByRef c As Double)

Код: Выделить всё
Sub test()
   Dim a() As Double: ReDim a(2)
   Dim d() As Double: ReDim d(2)
   Dim c As Double
   a(0) = 2: a(0) = 3: a(0) = 4
   d(0) = 2: d(0) = 5: d(0) = 6
   'Dim my_class As New erunda
   Call AddNum(a, d, c)
End Sub



ошибка естесна...
Как я только не пробовал писать. Перебрал практически всё ,что можно было нагуглить.
Результат ошибка "object required", "библиотека не найдена", "точка входа не найдена", ... вовщем ппц.

Помогите разобраться.
Да кстати, система у меня win 7 профешнл 64bit=)

....

Свойства проекта - Приложение - Сведения о сборке - галку на Сделать видимой для COM
Свойства проекта - Компиляция - галку на Регистрация COM-взаимодействия.
и так я тоже пытался делать. Дело в коде вызывающей программы.
Уходя с аэродрома прихвати деталь для дома.

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Подключение DLL к VBA

Сообщение MAGRAV » 13.09.2013 (Пт) 7:11

Я немного переиграл.

Создаю в VB .NET библиотеку DLL.
Галочку на : Приложение -> Сведения о сборке -> Сделать сборку видимой для COM
Галочку на : Компиляция -> Регистрация для СОМ-взаимодействия

Код: Выделить всё
Public Interface iSPL
    Sub AddNum(ByVal a() As Double, ByVal d() As Double, ByRef c As Double)
    Function aaa_q(ByVal a() As Double) As Double
    Sub ddd_q(ByVal d() As Double, ByRef ff As Double)
End Interface

Public Class SPL
    Implements iSPL

    Public Sub AddNum(ByVal a() As Double, ByVal d() As Double, ByRef c As Double) Implements iSPL.AddNum
        Dim ff As Double
        ddd_q(d, ff)
        c = aaa_q(a) + ff
    End Sub
    Public Function aaa_q(ByVal a() As Double) As Double Implements iSPL.aaa_q
        Dim i As Integer
        aaa_q = 0
        For i = 1 To a(0)
            aaa_q = aaa_q + a(i)
        Next i
        Return aaa_q
    End Function
    Public Sub ddd_q(ByVal d() As Double, ByRef ff As Double) Implements iSPL.ddd_q
        Dim i As Integer
        ff = 0
        For i = 1 To d(0)
            ff = ff + d(i)
        Next i
    End Sub
End Class



Помещаю полученный DLL в C:\Windows\System32.
Регистрирую полученный DLL в системе "regsvr32 ClassLibraryTest.DLL"
Выдаёт ошибку о том, что в системе зарегистрированно, но точки доступа не находит.

В меню Excel-я Tools->References ставлю галочку на моём классе "ClassLibraryTest" -> OK
Далее действую в коде VBA следующим образом:

Код: Выделить всё
Sub test()
   Dim a() As Double: ReDim a(2)
   Dim d() As Double: ReDim d(2)
   Dim c As Double
   a(0) = 2: a(0) = 3: a(0) = 4
   d(0) = 2: d(0) = 5: d(0) = 6
   Dim my_class As New SPL
   Call my_class.AddNum(a, d, c)
End Sub


Далее ошибка:

Run-time error 429
ActiveX component can't create odject
Вложения
Error.png
Ошибка при регистрации
Error.png (23.57 Кб) Просмотров: 3143
Уходя с аэродрома прихвати деталь для дома.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.09.2013 (Пт) 11:41



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList