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


Автор: Sheff_Guest 1.11.2004, 21:05
Люди, есть DLL'ка и приложение, в приложении код:
Код

char *data=new char[5];
strcpy(data,"Test");
//Здесь вызвается LoadLibrary и GetProcAddress
fnDLL(data); //Вызывается функуия из DLL и ей передаётся указатель на строку

В самой DLL'ке:
Код

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

Происходит ошибка, оно и понятно, т.к DLLка не видит переменных приложения, которым была загружена, как это лечить, как сделать так чтобы она их видела ?
MMF, shared data segments меня не устраивает, в моём проекте это не применимо...

Автор: Sheff_Guest 3.11.2004, 22:46
Народ, плиз, хоть какие-нить идеи

Автор: bel_nikita 3.11.2004, 23:06
Цитата
Происходит ошибка, оно и понятно, т.к DLLка не видит переменных приложения,
А для меня не совсем понятно :( Если бы код ошибки посмотреть...

А если перегрузить delete?

Автор: Sheff_Guest 4.11.2004, 23:30
Ошибка в общем странная, значение строки в "d" DLL'ка читает, а вот удалить по этому адресу не может.
Перегрузить delete ? Для типа char ??? А как это ?

Автор: bel_nikita 5.11.2004, 00:38
Может, так попробуй:
strcpy(&data[0],"Test");
fnDLL(&data[0]);
Хотя это тоже самое, но все же попробуй.

З.Ы.: А вообще не понятно: зачем в ДЛЛке очищать? Ведь приложение выделело память, и значит должно само за собой убрать, а не передавать это в ДЛЛ

Автор: Sheff_as_Guest 7.11.2004, 21:02
bel_nikita, не помогло...

Автор: Mad 7.11.2004, 21:14
Выделять надо не new а GlobalAlloc
тоди GlobalFree будет нормально освобождать память.

Автор: BraM's 10.11.2004, 12:17
Хороший стиль програмирования, ИМХО, заставляет освобождать память "там же" где она была выделена. Не надо передавать такие штучки в ДЛЛ на освобождение... Чего-то я в smile ударился

Автор: mr.DUDA 10.11.2004, 22:16
используй виртуальные деструкторы (тема уже поднималась !!)

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