powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подключение DLL к VBA
8 сообщений из 8, страница 1 из 1
Подключение DLL к VBA
    #38395055
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Создаю в VB .NET библиотеку DLL.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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.
Регистрирую библиотеку в системе. Пишу к примеру такой код в макросе:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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=)
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38395172
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Public Declare

.net-библиотеки так не работают в принципе.

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

После перекомпиляции эту библиотеку можно будет подключить через референсы в VBA.
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38395421
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

И так, кстати, пытался компелировать dll. Дело в коде вызывающей программы. Так же появлялась ошибка о том, что точку доступа не находит.
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38395441
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я немного переиграл.

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
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 следующим образом:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38395881
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для регистрации .net-библиотек нужно использовать утилиту regasm.exe
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Подключение DLL к VBA
    #38939745
vinsentKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAGRAV,

столкнулся с такой же проблемой. Удалось ли найти решение?
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38939756
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решения я подсказал, оно не работает?
...
Рейтинг: 0 / 0
Подключение DLL к VBA
    #38940035
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
Этого не достаточно. Просто создайте новый элемент COM-Class в вашей библиотеке - увидите, что необходимо. Опять же, насколько помню, должен присутствовать Public Sub New() явно. Дополнительно
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подключение DLL к VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]