Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема передачи указателя из проекта Билдера в библиотеку на MS VC++  (Прочитано 4091 раз)
0 Пользователей и 1 Гость смотрят эту тему.
direktorSan
Удачи!
Участник

ru
Offline Offline
Пол: Мужской

« : 08-10-2005 12:41 » 

Здравствуйте.

Помогите, пожалуйста, решить одну проблему.

Есть написанный в C++ Builder-e проект.

Есть написанная в MS Visual C++ DLL. Библиотека написана без использования MFC.
(Были причины писать в разных средах.)

Библиотека подключается в проекте явно с помощью LoadLibrary.
В ходе работы проекта из функции prjAddShell вызывается библиотечная функция libAddShell динамического (с использованием new) создания объектов самопального класса TShell, которые содержат потоки.

Указатели TShell* на созданные объекты передаются в проект под типом PVOID. Эти переданные указатели в проекте просто хранятся в списке объектов, т.е. никаких действий с ними не производится.

Далее из проекта из другой функции prjShellDirection вызывается очередная библиотечная функция libShellDirection управления объектами, одним из аргументов которой является указатель типа PVOID на один из объектов. В этой библиотечной функции libShellDirection происходит приведение типа PVOID к типу указателя на класс: TShell* shPtr = static_cast<TShell*>(Arg), после чего производятся некоторые действия с объектом (в т.ч., но необязательно, и его удаление вызовом delete).

В пределах функции libShellDirection все работает нормально. И возврат из этой функции в функцию prjShellDirection проета тоже происходит без проблем.
Но как только происходит выход из функции libShellDirection проекта возникает ошибка: "Access violation at address 00000009. Write of address 020C0D15." либо "Access violation at address 011835D7. Read of address FFFFFFFF."

Сперва я грешил на new/delete, т.е. на работу с памятью. Версия не подтвердилась.
Затем я просто убрал из передаваемых параметров указатель и ошибки исчезли (а функциональность, естественно, пострадала).
Также было замечено, что если все вызовы библиотечных функций делать из одной функции проекта, то ошибок не возникает (но функциональность страдает не меньше).

Кто-нибудь знает в чем может быть причина?
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 22-04-2006 13:12 » 

(комент)

ЧАВО (если ответит кто-нить)
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines