|
|
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Имеется библиотека, экспортирующая ф-ию: Код: plaintext 1. 2. 3. Есть код, использующий эту ф-ию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Почему при очистке буфера в функции b возникает ошибка (_CrtIsValidHeapPointer...)? Причем, если функция а статически прилинкована, то ошибки, естественно, не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:28 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Разные области памяти. Указатель на выделяемую память не __stdcall ( :) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:36 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Пробовал и __cdecl Гугл сразу выдал: _CrtIsValidHeapPointer (CRT)Verifies that a specified pointer is in the local heap (debug version only). Я проверил - под release версией ошибки не случается. Не понимаю пока как разрулить. Может попробовать GlobalHeap? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:45 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
С GlobalAlloc и GlobalFree работает как часы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 13:02 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
FuntНе понимаю пока как разрулить. Может попробовать GlobalHeap? Может будет более правельным вариантом передавать память в функцию или изменить структуру использовав каллбаки, и очищая в своей dll? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 13:12 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Akh FuntНе понимаю пока как разрулить. Может попробовать GlobalHeap? Может будет более правельным вариантом передавать память в функцию или изменить структуру использовав каллбаки, и очищая в своей dll? Передавать уже аллоцированную память не хочется, так как заранее не известен размер данных, а его вычисление сопоставимо с получением самих данных. Про коллбэки подумаю, а пока буду юзать HeapAlloc и HeapFree ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 13:18 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Надо с dynamic rtl компилировать и свою dll и использующий ее код (причем одинаковым компилятором). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:46 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
BarloneНадо с dynamic rtl компилировать и свою dll и использующий ее код (причем одинаковым компилятором). Это, по всей видимости, относится к продукции Borland? Я использую Visual Studio Используя HeapAlloc и HeapFree, столкнулся еще с одной проблемой. Код в DLL Код: plaintext 1. 2. 3. 4. Если этот же код использовать без DLL, то все проходит. Может быть куча в DLL не может расти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:46 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Я же Используя HeapAlloc и HeapFree, столкнулся еще с одной проблемой. Код в DLL Код: plaintext 1. 2. 3. 4. Если этот же код использовать без DLL, то все проходит. Может быть куча в DLL не может расти? Все, вопрос снимается. Буфер пополнялся с помощью _tcscpy(szAllBuf + dwAllRead, buf); а надо было: memcpy(szAllBuf + dwAllRead, buf, dwRead); Получается, что strcpy делает что-то с буфером, что становится невозможным использовать realloc! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 16:10 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Funt BarloneНадо с dynamic rtl компилировать и свою dll и использующий ее код (причем одинаковым компилятором). Это, по всей видимости, относится к продукции Borland? Я использую Visual Studio Не, в Visual Studio это в настройках проекта С/С++ -> Code Generation -> Use run-time library -> Multitreaded dll (в 6 версии, в других ищите где) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 16:45 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Barlone Funt BarloneНадо с dynamic rtl компилировать и свою dll и использующий ее код (причем одинаковым компилятором). Это, по всей видимости, относится к продукции Borland? Я использую Visual Studio Не, в Visual Studio это в настройках проекта С/С++ -> Code Generation -> Use run-time library -> Multitreaded dll (в 6 версии, в других ищите где) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 17:00 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
В 8-ке у меня стоит Multi-threaded (/MT) Если поставить Multi-threaded DLL (/MD), то скомпилится с MSVCR80.dll и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 17:04 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
Память должна выделяться и уничтожаться либо с помощью функций CRTL, либо с помощью С++-сных new/delete. Ну или с помощью функций WinAPI ( или другого API OS). Нельзя выделять память malloc-ом, а освобождать с помощью delete (strdup использует malloc). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 21:17 |
|
||
|
Выделение памяти в вызываемой функции. В DLL
|
|||
|---|---|---|---|
|
#18+
MasterZivПамять должна выделяться и уничтожаться либо с помощью функций CRTL, либо с помощью С++-сных new/delete. Ну или с помощью функций WinAPI ( или другого API OS). Нельзя выделять память malloc-ом, а освобождать с помощью delete (strdup использует malloc). Это безусловно. Там в первом посте ошибка по поводу delete. С функцией free - аналогично. Немного погуглив, нашел ту же проблему и советы использовать heap functions вместо CRT (например, на CodeGuru Assertion _CrtIsValidHeapPointer(pUserData) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 12:11 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=327&tid=2030169]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
726ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 1067ms |

| 0 / 0 |
