Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать на VBA объект класса, который написан на С++ и подключен как DLL? / 5 сообщений из 5, страница 1 из 1
07.12.2016, 12:15
    #39361724
rothor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
Есть тестовый код на C++, в котором описана функция MyFun001 и класс MyClass , который содержит функцию CFun001 и переменную CVal . Код компилируется в библиотеку DLL (используется Visual Studio 2015).

Описанный тестовый проект С++ содержит два файла: source.cpp и DefFile.def .

Файл DefFile.def нужен, как я понимаю, для того, чтобы указать компилятору создать в DLL точки входа для функций (чтобы def-файл учитывался компилятором, в настройках проекта нужно указать имя этого файла - см. подробнее здесь ).

Содержание кода С++:

source.cpp:
Код: plaintext
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.
// заголовки класса и функции
int _stdcall MyFun001(int);
 
class MyClass
{
public:
    MyClass();
    int CFun001(int);
private:
    int CVal;
};
 
 
// реализация класса и функции
int _stdcall MyFun001(int x)
{
    MyClass mc;
    return mc.CFun001(x);
}
 
MyClass::MyClass()
{
    CVal = 3;
}
 
int MyClass::CFun001(int y)
{
    return CVal * y;
}



DefFile.def:
Код: plaintext
1.
2.
3.
LIBRARY "source"
EXPORTS
MyFun001




Код VBA в MS Excel 2010:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Declare PtrSafe Function MyFun001 Lib "D:\_CPP\TestLib\TestLib001\Debug\TestLib001.dll" _
                         (ByVal x As Long) As Long
 
Private Sub TestMyDLL()
    x& = 4
    Debug.Print MyFun001(x)
    
    Dim o1 As New MyClass
    Debug.Print o1.CFun001(x)
End Sub



Функция MyFun001 из DLL в VBA запускается и корректно работает. Но как создать объект класса MyClass я не понимаю, приведённый код вызывает ошибку "User-defined type not defined". В файле .def класс описать нельзя так же как функции, а в VBA класс нельзя декларировать (Declare Class...).
...
Рейтинг: 0 / 0
07.12.2016, 14:04
    #39361817
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
чтобы работало Dim o1 As New MyClass, библиотека должна быть com-библиотекой, то есть поддерживать интерфейсы IUnknown и IDispatch, а еще она должна быть зарегистрирована в реестре или иметь манифест.

https://msdn.microsoft.com/en-us/library/ms680573.aspx
...
Рейтинг: 0 / 0
07.12.2016, 14:06
    #39361818
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
...
Рейтинг: 0 / 0
07.12.2016, 14:35
    #39361844
rothor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
Antonariy, а есть ли возможность создавать объекты без регистрации DLL?

Предполагается, что файл Excel + файл DLL будут использоваться на разных компьютерах разными пользователями (в т.ч. кнопконажимателями). Регистрация DLL будет либо требовать каждый раз моего присутствия, либо может сопровождаться затруднениями, которых хотелось бы избежать.
...
Рейтинг: 0 / 0
07.12.2016, 14:55
    #39361866
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
rothorAntonariy, а есть ли возможность создавать объекты без регистрации DLL?манифест.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать на VBA объект класса, который написан на С++ и подключен как DLL? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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