powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
5 сообщений из 5, страница 1 из 1
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
    #39361724
rothor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть тестовый код на 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
Как создать на VBA объект класса, который написан на С++ и подключен как DLL?
    #39361817
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы работало Dim o1 As New MyClass, библиотека должна быть com-библиотекой, то есть поддерживать интерфейсы IUnknown и IDispatch, а еще она должна быть зарегистрирована в реестре или иметь манифест.

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

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


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