Страницы: Пред. 1 2
RSS
DLL на C++ или C# для Excel
 
Цитата
bedvit написал:
А какой должен быть target у события calculate?
Это знает только сам ексель ) Впрочем трудно представить ситуацию когда бы мог понадобиться весь массив обновляемых значений.
 
Цитата
testuser написал:
главная причина, почему такая штука могла быть полезна, отсутствие параметра target у события calculate.
Цитата
testuser написал:
Цитата "bedvit  написал:А какой должен быть target у события calculate?" Это знает только сам ексель ) Впрочем трудно представить ситуацию когда бы мог понадобиться весь массив обновляемых значений
Выходит только Excel знает для чего нужна такая dll. Но Excel не нужно никаких библиотек, он и так хорошо живет.
Изменено: bedvit - 12.11.2022 13:22:24
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Но Excel не нужно никаких библиотек, он и так хорошо живет.
Так посмотреть, не совем хорошо, УФ там какое-то "летучее" и вообще..
 
Кстати, у меня также вопрос по данной теме и я думаю мне помогут)
Денис, вот небольшой пример, который компилируется! Думаю как раз то, что Вам нужно!

main.cpp
Код
 __declspec(dllexport)
int sum(int a, int b)
{
    return a + b;
}
defFile.def
Код
LIBRARY "dll_vscode"
EXPORTS
sum
Создаёте консольное приложение. Далее в Исходных файлах создаёте 2 файла C++, которые выше и компилите всё это! В папке с проектом будет DLL!

Но теперь вопрос на двоих) Как данную DLL зарегестрировать? По туториалам выдает вот такую ошибку: "...Модуль загружен, но точка входа DLLRegisterServer не найдена..."Я за C++ не шарю, также как и Денис, только на этапе изучения, но я так понимаю нужно функцию DLLRegisterServer интегрировать в код чтобы DLL подключить к тому же Excel через References? Или Винда 10 корявая у меня и в ней дело?
 
Не нужно ее регистрировать. Или вы хотите СОМ - сделать? Тогда регистрировать надо, но там несколько посложнее. Судя по вашему коду вы делаете обычную dll.
Как сделать и использовать я скинул в 25 сообщении в ролике. Что там непонятно? Вы смотрели?
«Бритва Оккама» или «Принцип Калашникова»?
 
Да смотрел и изначально по тому примеру пробывал делать, но тот код не компилируется на VS 2022. Выше код работает как нужно.

Цитата
написал:
Или вы хотите СОМ - сделать?
bedvit, На скрине прикреплял ошибку подключения dll к Excel и чтобы использовать данную функцию, как встроенную, необходимо COM я правильно понимаю?

И функции для точки входу нужно прописывать, плюс на ранее или познее связывание парочку примочек. На этом форуме я думаю найдется человек, кто сталкивался с этим) Планета Excel всё-таки!) Или книга может есть на создание подобных фич?
 
Смешали в всё в одну кучу. Как говорит мой коллега: "сало, мёд, говно и гвозди".
1.Процедурная библиотека: dll - регистрация не нужна, используем Declare в VBA. Не является "как встроенная". Самая простая, вы ее и пытаетесь сделать. Все просто как две копейки.
2. ООП-библиотека: СОМ (можно использовать классы). Нужна
регистрация в реестре. Нужно понимать что такое интерфейсы, ранеее связывание (статистическое), позднее (динамическое),  регистрацию в реестре, как это все настроить и куча всего другого. Сложно. По сути не является "как встроенная". Используется в VBA и в других языках и программах, поддерживающих СОМ. Половина винды - это СОМ.
3. Является "как встроенная"-специальная библиотека для Excel: XLL. По сути процедурная dll,т.к.использует С API Excel, т.е. функционал самого Excel для листа. При должном уровне прокачки, можно там же реализовать поддержку СОМ, с полной интеграцией с СОМ-моделью Excel, и соответственно всего доступного функционала. Для Excel самый быстрый и продвинутый инструмент. Используется в VBA, и в самом Excel, в виде функций листа (если реализовано СОМ, то и в любом другом виде: отслеживание событий, управление обектами-листы,графики, имена, схемы, создание и управление VBA-макросами, не написав не строчки на VBA и т.д.). Сочетает сложность СОМ и  С API Excel.
Изменено: bedvit - 23.11.2022 09:45:03
«Бритва Оккама» или «Принцип Калашникова»?
 
Я Вас понял, но в целом идея создать не простую DLL, а что-то наподобие Microsoft Scriptlet Library (один из функционалов - Словарь VBA). Чтобы можно было подключить к VBA и не прописывать в коде Declare, а также аргументы и параметры чтобы были в коде при раннем связывании!

Код выше просто как пример) И я так понимаю необходимо реализовывать COM? Но Вы ещё указали на .xll. Я так понимаю это проще и если нужно, скажем только для VBA, то это лучший вариант?
 
Если вам нужнн быстрый словарь для VBA, то можно использовать этот.
Если потренироваться в написании dll, то лучше первый вариант.
Если хотите пойти в серьезную разработку, то готовтесь нужно иметь ввиду, что это самостоятельная и сложная задача. Сразу и все вам никто не расскажет.
XLL - это процедурная dll. Если вам нужны классы, это COM.DLL. Для раннего и позднего связывания там разные механизмы. Если пойдете в СОМ, возможно в Студии вам облегчит путь ATL.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, благодарю за информацию. Судя по словарю, Вы тот самый человек, который всё это реализовал (просмотрел Ваш сайт). В итоге BedvitXLL.xll и BedvitCOM.dll у Вас имеется своя). Если не сложно описать, то как долго изучали необходимый материал для реализации данного софта http://bedvit.ru/ без учета знаний C++, а именно технических моментов, связанные с интеграцией и реализацией. Просто Google со знанием русского хватит, или English непомешает)? Плюс литература может быть есть какая?
 
В основном это самообразование и участие в разработках на разных форумах. В т.ч. и здесь. Проекту несколько лет и до сих изучаю матчасть, по блокам, который ранее не проходил, а они встретились в проекте. Литература есть, разная для разных направлений. Советовать не могу, не знаю, что вы хотите. Английский знать всегда полезно, но это не обязательное условие.
«Бритва Оккама» или «Принцип Калашникова»?
 
Появилась идея реализовать .xll COM.dll и я так понимяю это самая сложная реализация из представленных)
bedvit, подскажите пожалуйста, если не сложно, литературу и прочие источники по реализации COM.dll

Погуглил и понял, что для меня лучше COM.dll

Я же правильно понимаю, что для реализации функционала в коде, необходимо COM.dll?
Изменено: Дмитрий - 28.11.2022 09:03:17
 
Начинайте с азов. Матчасть.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, , благодарю за ресурсы. Буду вникать). И последний (надеюсь) вопрос.
Процедурная dll по вызову функций быстрее dll типа COM? Или разницы нету?
 
Цитата
Дмитрий написал:
Процедурная dll по вызову функций быстрее dll типа COM?
Освоите теорию и сами нам напишите ответ на свой вопрос.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: Пред. 1 2
Наверх