Совместное использование динамически распределенных массивов между функциями в библиотеке динамических ссылок - PullRequest
0 голосов
/ 06 октября 2018

У меня есть общая библиотека C (в моем случае, DLL), которая используется для вызовов функций очень процедурным способом.Другими словами, основное приложение (.exe) выполняет отдельные вызовы функций для этой DLL в разное время.Я хотел бы поделиться той же переменной массива среди определенных функций в DLL.Есть функция, которая выделяет и инициализирует массив.Есть еще одна функция, которая использует массив для некоторых вычислений.Но эти функции вызываются из основного приложения отдельно.Поэтому я не могу передать массив из функции инициализации в DLL в другую, потому что каждая функция вызывается отдельно (в разное время).

Я бы хотел избежать использования глобальной переменной.Я мог бы сделать это, и статически определить массив, чтобы иметь достаточно большой размер, чтобы быть "безопасным".Но достаточно большой может означать излишне большой.Я видел сообщения, в которых предлагалось определить массив в функции, но в качестве статической переменной и динамически распределять ее при вызове функции инициализации, но мне все равно потребуется доступ к тому же массиву в других функциях.

Каков наилучший способ сохранить общий код (т. Е. С динамическим распределением памяти), обеспечивая доступ к одному и тому же массиву из нескольких функций?

ОБНОВЛЕНИЕ

Aнесколько подробностей после некоторого обсуждения.

Один из возможных подходов - сохранить дескриптор массива в вызывающей программе (.exe) и передать его функции DLL при необходимости.Но, с точки зрения интерфейса / API, не имеет смысла продолжать передавать этот массив, потому что это потребует изменения сигнатур функций, которые не должны изменяться.Массив должен действительно находиться в DLL и быть доступным везде.Мне нужно только обновить его содержимое при вызове функции инициализации в DLL.Тогда другие функции DLL будут использовать его внутри DLL.

...