Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > DLL и программа


Автор: Sheff_Guest 31.10.2004, 21:40
Уважаемые программисты, такая проблема:
Есть код в проге:
Код

char *data;
data=new char[5];
strcpy(data,"Test");
//LoadLibrary, GetProcAddress, вобщем загружаю библиотеку и беру адрес функции
fnDLL(data);

Функция fnDLL в DLL'ке:
Код

void fnDLL(char* d)
{
   delete[] d;
}

Тут-то и вылетает ошибка и ясное дело, адрес-то я передаю из проги, а в DLL своя адресация и переменных из проги она не видит, как это исправить, тока MMF, shared data segment'ы не предлагать, меня это не устраивает

Автор: S.A.P. 1.11.2004, 08:50
А стоит ли так поступать? Не лучше ли освобождать память в вызывающем процессе?

Автор: Vaulter 1.11.2004, 11:28
Sheff_Guest
ошибка скорее всего ближе к этому месту
Код

void fnDLL(char* d)
{
   delete[] d;
}

, поподробнее...

Автор: S.A.P. 1.11.2004, 11:41
Цитата(Vaulter @ 1.11.2004, 11:28)

ошибка скорее всего ближе к этому месту

Vaulter, указатель передается из другого адресного пространства в этом то и ошибка, а вот как закрыть память из DLL?

Автор: Guest 1.11.2004, 12:34
Цитата(Perchilla @ 1.11.2004, 11:41)

указатель передается из другого адресного пространства в этом то и ошибка
DLL загружается в адресное пространство процесса её загрузившего.

Автор: Mad 1.11.2004, 12:45
Цитата(Sheff_Guest @ 31.10.2004, 21:40)

MMF, shared data segment'ы не предлагать, меня это не устраивает

Вопервых непонятно чем не устраивает :)


Цитата(Perchilla @ 1.11.2004, 11:41)

указатель передается из другого адресного пространства

DLL-ка вообщето грузится в адресное пространства процесса (иначе она вообще смогла бы общатся с вызвашим только через IPC механизмы).

Тут дело в new.
Попробуй заменить его на GlobalAlloc. а delete на GlobalFree (такая схема у меня работает).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)