Вопрос по перевыделению памяти
От: Аноним  
Дата: 10.04.03 13:21
Оценка:
Вопрос:
в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
Возникает куча проблем: при использовании разных версий компиляторов, при использовании Release|Debug версий бинарников (т.е. из release программы вызываю debug dll и аналогично с различными версиями компиляторов).

Какие существуют пути решения этих проблем?
Если использовать inproc COM то проблемы решаться?
Как я понимаю, при использовании COM проблема не решиться, т.к. "честно" передасться между модулями только указатель на память, а работа с ней так и будет зависеть от параметров компиления бинарников.

Вообще, хорошо ли это перераспределять память в DLL?
Сам не сторонник, но в моем случае удобно.....

Спасибо.
Павел.

11.04.03 14:07: Перенесено из 'C/C++'
Re: Вопрос по перевыделению памяти
От: BOPOH_N Россия  
Дата: 10.04.03 13:44
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Вопрос:

А>в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
А>Возникает куча проблем: при использовании разных версий компиляторов, при использовании Release|Debug версий бинарников (т.е. из release программы вызываю debug dll и аналогично с различными версиями компиляторов).

А>Какие существуют пути решения этих проблем?

А>Если использовать inproc COM то проблемы решаться?
А>Как я понимаю, при использовании COM проблема не решиться, т.к. "честно" передасться между модулями только указатель на память, а работа с ней так и будет зависеть от параметров компиления бинарников.

А>Вообще, хорошо ли это перераспределять память в DLL?

А>Сам не сторонник, но в моем случае удобно.....

А>Спасибо.

А>Павел.

Вобще это принципиально неправильный подход к проектированию. Модуль выделяющий память должен его и освобождать. Экспортируй из dll ф-ии Malloc и Free и используй их.
http://veg.nm.ru/11.gifВ искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Вопрос по перевыделению памяти
От: trial  
Дата: 10.04.03 13:47
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Вопрос:

А>в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
А>Возникает куча проблем: при использовании разных версий компиляторов, при использовании Release|Debug версий бинарников (т.е. из release программы вызываю debug dll и аналогично с различными версиями компиляторов).

А>Какие существуют пути решения этих проблем?


Сама по себе идея ИМХО плохая...но если очень надо, то можно CoTaskMemAlloc/CoTaskMemFree и пр. подобные функции
Re: Вопрос по перевыделению памяти
От: Dima2  
Дата: 10.04.03 13:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос:

А>в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
А>Возникает куча проблем
каких?
тут у тебя одна проблема, использование в DLL и "приложении" разных версий CRT.
самый лучший вариант, как уже сказали, кто выделяет тот удаляет/перевыделяет.
Re: классы функторов и binary_function
От: dkon  
Дата: 10.04.03 14:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос:

А>в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
А>Возникает куча проблем: при использовании разных версий компиляторов, при использовании Release|Debug версий бинарников (т.е. из release программы вызываю debug dll и аналогично с различными версиями компиляторов).

А>Какие существуют пути решения этих проблем?


rtfm ::GlobalAlloc
Re: Вопрос по перевыделению памяти
От: VanKir  
Дата: 11.04.03 07:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос:

А>в приложении выделяю память передаю указатель в DLL, там удаляю и выделяю память заново.
А>Возникает куча проблем: при использовании разных версий компиляторов, при использовании Release|Debug версий бинарников (т.е. из release программы вызываю debug dll и аналогично с различными версиями компиляторов).

А>Какие существуют пути решения этих проблем?

А>Если использовать inproc COM то проблемы решаться?
А>Как я понимаю, при использовании COM проблема не решиться, т.к. "честно" передасться между модулями только указатель на память, а работа с ней так и будет зависеть от параметров компиления бинарников.

Именно по этой причине и перешли к COM тк память за собой убирает сам объект, когда счетчик станет нулём... и передавать надо указатель на интерфейс ентого объекта, а когда тебе память больше не будет нужна то ты освободишь все ссылки на интерфейс и COM объект удалится сам и очистит память...

А>Вообще, хорошо ли это перераспределять память в DLL?

А>Сам не сторонник, но в моем случае удобно.....

если ты будешь использовать сам эту DLL и будешь использовать одну и ту же CRT library, то не вижу причин чтобы не применять такой подход, но если ты собираешься давай свою DLL-ку кому-нить ещё, то лучше так не делать (IMHO разумеется)

А>Спасибо.

А>Павел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.