Может ли библиотека на С++ хранить состояние при подключении к основному проекту на C#?
Хочу написать парсер как dll`ку на С++ и подключить её к основному C# проекту. Но между парсами надо хранить несколько массивов, чтобы не получать их каждый раз с сайта, и использовать их в этом же С++ парсере при следующих вызовах функции распарса.
Это возможно сделать, не передавая каждый раз из C# в функцию C++ эти массивы? Т.е. чтобы библиотека хранила их где-то в своей памяти и иногда к ним обращалась. Они большие и на постоянную передачу будет затрачено кучу ресурсов. Если бы я писал всё на C#, то просто импортировал бы класс парсера и создал бы его экземпляр в своей памяти, но в С++ я новичок и не знаю как она себя поведёт, или как это сделать иначе.
Если коротко: С++ dll- это набор статических функций, или она может держать состояние у себя? Или для того что я хочу используются какие-то другие подходы?
В библиотеке функция DllMain() вызывается при загрузке и выгрузке библиотеки. При загрузке делаете инициализацию необходимых ресурсов, при выгрузке - очищаете. В промежутках - пользуетесь.
Состояние можете объявить в виде глобальной (относительно библиотеки) структуры/класса, который будет содержать нужные данные.
Если вы эти массивы передаете в библиотеку из внешней программы (а не сама библиотека их получает), то и держите их у себя до конца работы. В библиотеку достаточно передавать указатели на них (ссылки), при этом никакой кучи ресурсов затрачено не будет.