Re[7]: возврат vector<My_Struct> из функции в .dll
От: Vruyr  
Дата: 15.12.04 15:47
Оценка:
ИМХО, можно написать инлайновый алокатор который выделяет память при помощи ::CoTaskMemAlloc() и удаляет ::CoTaskMemkFree(), и тогда проблемм с кучами не будет. Можно ещё написать классик class SuperVector: public std::vector; который переорделаяет оператор new и себя тоже создаёт через ::CoTaskMemAlloc(). Я думаю что должно работать. Сам не пробовал.

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Аноним, Вы писали:


А>>>Здравствуйте, yxiie, Вы писали:


Y>>>>Здравствуйте, <Аноним>, Вы писали:


К>>>>>>Использовать рантайм Multithreaded DLL.

А>>>>>собирается с /MTd

К>>>>>>Как вариант: откажись от вектора, передавай указатели на массивы.

А>>>>>так массивы придется грохать опять же не в той длл в какой они были созданы или я чего не догоняю?

Y>>>>ну дак экспортируй из той длл также ф-цию MyDllFree

А>>>это все ведет к тому, что возвращаемый вектор придется делать глобальным, а я этого делать не хочу

А>>никакой глобализации для этого не требуется. Просто сделай фабрику которая создает эти массивы функцией create и мочит их destroy и все. соответственно в экспортируемой функции DLLCreate вызывай у этого объекта create, а в DLLFree destroy


А>как я понял в библиотеке которая должна выдавать vector (в нашей терминологии длл1) будет жить некая сучность которая будет создавать вектор/массив, который далее будет возвращаться длл2 через вызов GetMenu, далее эта сучность будет грохать вектор/массив при выгрузке длл1? но тогда, по сути дела, эта сучность просто обертка вокруг вектора/массива, в чем преимущество, глобальный вектор/массив или вектор/массив с оберткой. к тому же длл1 должна экспортировать GetMenu в как можно более простом виде, идеальный вариант — GetMenu возвращающая вектор, это пользовательская библиотека, наворотов должно быть минимум


А>такой вопрос: сюда экспорт аллокаторов никак нельзя прикрутить, допустим передать аллокатор из длл2, в длл1 используя переданный аллокатор заполнить вектор и вернуть его а длл2?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.