Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > CLR и MFC очень надо |
Автор: xclock 15.5.2008, 00:04 |
Здравствуйте, помогите, пожалуйста, возникла следующая проблема: Есть класс, который я писал, используя, библиотеки afxwin.h, afxdb.h. При попытке запустить приложение CLR, с подключенными этими библиотеками, происходило следующие: 1) Сначала вылезала такая ошибка: “fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]” Решение: #define _AFXDLL 2)Потом стали вылезать ошибки такого типа error C3641: DrawState’ : invalid calling convention ‘__stdcall ‘ for function compiled with /clrure or /clr:safe Решение: project properties -> General -> Common Language Runtime c /clrure НА /clr 3) Ура, компиляция завершена, НО ((( при запуске вылетает эта ошибка: _CrtIsValidHeapPointer(pUserData) И тут я в тупике, как решить проблему, помогите, пожалуйста? |
Автор: NovorosSupport 15.7.2009, 17:01 | ||
В принципе, отладчик должен был показать место ошибки. По опыту могу сказать, проблема с динамическим распределением памяти. Например, когда есть две динамически выделенных области памяти, одна из которых B[] инициализируется адресом, пересекащимся с другой областью A[]. Всё впорядке до поры до времени. Однако во время выполнения программы после освобождения блока памяти А[] и при последующем освобождении или использовании блока B[] сгенерируется указанное исключение, т.к. программа пытается получить доступ к памяти, которая ей уже фактически не принадлежит. На мой взгляд, если уж нужно интенсивно поработать с блоком А[], то помочь могут указатели. Однако и здесь нужно следить, когда была освобождена память А[]. Ещё один вариант - более позднее освобождение А[], что не всегда бывает оптимально. P.S. Каков вопрос, таков ответ ![]() |