172 похожих чатов

Господа растасьяны, нужна ваша помощь Сейчас делаю систему плагинов на основе

динамической загрузки библиотек(плагинов) в рантайме, так вот, я хочу сделать такую штуку:
Основная программа имеет API для плагинов, где есть бизнес-логика, есть плагин, который с ним интерфейсит, и сам интерфейс, который работает чисто как хедер файл в C/C++.
В рантайме плагин использует этот хедер что бы обращаться к API внутри программы.
Подскажите, как такое можно реализовать?
Надеюсь правильно объяснил 😅

5 ответов

17 просмотров
Voltangle-🇨🇿🇺🇦 Автор вопроса

Поискал ещё, нашел что-то похожее Использование extern "C" {/* блок с объявлениями функций*/} в крейте "интерфейса"(типо хедера), а в программе основной использовать тоже extern "C" но уже с имплементацией функции в том же пути, что и лежит объявление функции в хедере Надеюсь я правильно прочитал доку по этому 😅

Voltangle 🇨🇿🇺🇦
Поискал ещё, нашел что-то похожее Использование ex...

ну extern “C” это правильное направлиние чтобы обеспечить хотя бы совместимый abi между плагином и аппой

Voltangle-🇨🇿🇺🇦 Автор вопроса

это я знал, везде где использовался ABI я использовал extern "C", я именно про создания "хедера", что бы сделать систему как в C/С++

Voltangle 🇨🇿🇺🇦
это я знал, везде где использовался ABI я использо...

Можешь взять сишный хэдер, препроцесить его с помощью bindgen, тем самым получить файл с растовыми сигнатурами. И поправить этот файл, добавив свою реализацию

Voltangle-🇨🇿🇺🇦 Автор вопроса
Dmitry Sviridkin
Можешь взять сишный хэдер, препроцесить его с помо...

и как тогда сделать имплементацию этого хедера в основе(куда плагины и "вставляются")?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта