Страницы: 1
RSS
Создать DLL (C++) для Excel 2016
 
Как сделать на C++ DLL'ку (ActiveX для Excel) ?
Обычные DLL не принимает Excel. Уже всяко попробовал - не кушает их Excel.
Задача: Писать и компилировать DLL на языке C/C++, чтобы потом эту DLL использовать в Excel_2016.
(языкам C/C++, VBA учить не надо, визуальные компоненты тоже не нужны).
Бюджет 3000 руб.  Задача решена.
Изменено: A-Soft - 24.01.2026 15:55:28
 
А запрос в чем, если не надо учить языкам? В том, как написать DLL на C++? Без даже минимального обучения нужному языку рассказывать нечего :)
Цитата
A-Soft написал:
Обычные DLL не принимает Excel
а обычные - это какие? Насколько знаю, правильно написанная DLL(хоть на паскале) нормально подключается к той программе, под которую написана. Даже на VB можно это сделать(через грабли, но можно).
Или хотите такую, которая подключается просто двойным кликом по файлу?

P.S. Заказ не занимаю, если что. Просто любопытствую.
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2026 14:24:18
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
А запрос в чем, если не надо учить языкам?
Проблемы в объявлениях, в ключах компиляции. Где чего прописать чтобы получить ActiveX DLL?
Сами функции я писать умею, но под разные платформы код пишется со своими индивидуальными заковыками.

Цитата
Дмитрий(The_Prist) Щербаков написал:
а обычные - это какие?
С простым процедурным программированием.
Во вложении архивчик с исходниками.
В DLL описана функция   kvadtar, возвращающая квадрат числа.
А в файле prob1.xlsm ну никак она не работает.
Тычу Tools->References->Browse...  не коннектится DLL'ка.
И в VBA Declare-строка не помогает.

xlam не подходит. Только DLL.
Изменено: A-Soft - 21.01.2026 14:44:22
 
Здравствуйте.
С Вашей dll у меня не получилось. Написал свою (правда не С++, а Lazarus) всё заработало (пробовал в Delphi, Lazarus и Excel). Пример приложил. Если не обязательно написать dll в С++ можем обсудить.
Изменено: Aлeкceй - 21.01.2026 22:06:45
 
На Delphi(Pascal) тоже могу. Актуально.

Но не завелась ваша DLL.
Как только открыл prob1.xlsm - сразу ошибка в VBA: директива Declare требует PtrSafe
По вот этой статье
https://vremya-ne-zhdet.ru/vba-excel/obyavleniye-funktsiy-v-64-razryadnykh-versiyakh/
Добавил PtrSafe:
Цитата
#If VBA7 Then
   Declare PtrSafe Function kbadrat Lib "C:\Linux_folder\Excel_2\xx\MyCalcLib.dll" (ByVal val As Integer) As Integer
   Declare PtrSafe Function kbadrat_dbl Lib "C:\Linux_folder\Excel_2\xx\MyCalcLib.dll" (ByVal val As Double) As Double
#Else
   Declare Function kbadrat Lib "C:\Linux_folder\Excel_2\xx\MyCalcLib.dll" (ByVal val As Integer) As Integer
   Declare Function kbadrat_dbl Lib "C:\Linux_folder\Excel_2\xx\MyCalcLib.dll" (ByVal val As Double) As Double
#End If
VBA это проглотил, но в ячейках   #ЗНАЧ!
Наверное какая-то проблема с Excel 2016. Не работает он с этой DLL.
Мне нужна работа в том числе под Win7, а не только Win10/11.
Под Win7 крайний Excel 2016 года. Древний, конечно...

Сможете Lazarus.dll + Excel_2016 ?
 
Пишу в ЛС
 
Добрый день!
Позвольте , без участия, дать 4 совета, может, просто пригодятся.
1. Если писать на C/C++ , то лучше, удобнее и надежнее в Microsoft Visual Studio Express, это бесплатная версия.
2. DLL-ки должно быть две: одна для 32-битых Excel, другая - для 64 битных, а в условной компиляции #If... выбирать нужную.
3. Задавать путь к DLL в Declare совсем некрасиво, лучше бы не зависеть от фиксированных путей в расчете, что DLL-ки будут в той же папке, что и XLSM, или в папке, например, уровнем ниже (../DLL)
4. В Declare числовые аргументы нужно передавать ByVal, чтобы передавались их числовые значения, а не адреса. У Алексея это, кстати, учтено.
5. С вариантом COM DLL для таких простых проектов вряд ли имеет смысл заморачиваться, т.к. там нужно много еще чего прописать: интерфейсы, классы, GUID, регистрация библиотек. В С# это проще, если что.
Изменено: ZVI - 23.01.2026 00:05:46
 
ZVI, Доброе утро!
Цитата
ZVI написал:
Позвольте , без участия, дать 4 совета,
обещал 4, дал 5, главное во время остановиться🤣
 
Цитата
написал:
обещал 4, дал 5
так совпало 😁
 
Я считаю так... )))
 
Судя по всему какая-то проблема с Excel 2016.
Все Declare требуют PtrSafe, и никак иначе.
С PtrSafe VBA не видит синтаксической ошибки, но DLL'ки не подгружает.
Ни в Win7x64, ни в Win10x64.
(пути конечно правлю на свои).
На Win10х64 установил Office 2019 x64, но все равно требует PtrSafe (хотя по-идее не должен) и так же не подгружает DLL'ки.
Поищу другие дистрибутивы - может тогда примеры Алексея смогу запустить у себя.
Почему у всех работают Declare без PtrSafe, а у меня нет?  :cry:
Изменено: A-Soft - 23.01.2026 15:00:58
 
Цитата
написал:
Почему у всех работают Declare без PtrSafe, а у меня нет?
Дистрибутивы не причем.
Просто у "всех" 32 битные версии Excel, не иначе.
Здесь не положено обсуждать технические вопросы.
Надеюсь, Алексей поможет. Если что - пишите в ЛС, но смогу посмотреть поздно.
Изменено: ZVI - 23.01.2026 15:31:40
 
Цитата
ZVI написал:
Здесь не положено обсуждать технические вопросы.
Извините. Исправлюсь.
Просто люди стали писать в теме, я посчитал что отмалчиваться будет невежливо.
 
Задача решена.
Спасибо Aлeкceю !!!
Тему можно закрывать.
Страницы: 1
Читают тему
Наверх