Задать вопрос
@FlameArt

Может ли библиотека на С++ хранить состояние при подключении к основному проекту на C#?

Хочу написать парсер как dll`ку на С++ и подключить её к основному C# проекту. Но между парсами надо хранить несколько массивов, чтобы не получать их каждый раз с сайта, и использовать их в этом же С++ парсере при следующих вызовах функции распарса.

Это возможно сделать, не передавая каждый раз из C# в функцию C++ эти массивы? Т.е. чтобы библиотека хранила их где-то в своей памяти и иногда к ним обращалась. Они большие и на постоянную передачу будет затрачено кучу ресурсов. Если бы я писал всё на C#, то просто импортировал бы класс парсера и создал бы его экземпляр в своей памяти, но в С++ я новичок и не знаю как она себя поведёт, или как это сделать иначе.

Если коротко: С++ dll- это набор статических функций, или она может держать состояние у себя? Или для того что я хочу используются какие-то другие подходы?
  • Вопрос задан
  • 210 просмотров
Подписаться 3 Средний Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
Может.

В библиотеке функция DllMain() вызывается при загрузке и выгрузке библиотеки. При загрузке делаете инициализацию необходимых ресурсов, при выгрузке - очищаете. В промежутках - пользуетесь.
Состояние можете объявить в виде глобальной (относительно библиотеки) структуры/класса, который будет содержать нужные данные.

Если вы эти массивы передаете в библиотеку из внешней программы (а не сама библиотека их получает), то и держите их у себя до конца работы. В библиотеку достаточно передавать указатели на них (ссылки), при этом никакой кучи ресурсов затрачено не будет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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