Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подключение DLL к VBA / 8 сообщений из 8, страница 1 из 1
12.09.2013, 17:19
    #38395055
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение DLL к VBA
Добрый день!
Создаю в 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
12.09.2013, 18:42
    #38395172
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение DLL к VBA
Код: vbnet
1.
Public Declare

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

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

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

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

Создаю в 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
13.09.2013, 12:42
    #38395881
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение DLL к VBA
Для регистрации .net-библиотек нужно использовать утилиту regasm.exe
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.04.2015, 06:16
    #38939745
vinsentKV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение DLL к VBA
MAGRAV,

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


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