Показать сообщение отдельно
Старый 17.05.2013, 17:47   #12
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений
(для 634 пользователей)
Ответ: Передача указателя на интерфейс через DLL

Эй, DarkMedveD, твой главный косяк в отсутствии нормального конструктора класса Shader. Ты не зануляешь указатели, в частности errorBuffer. В итоге если функция D3DXCompileShaderFromFile завершается нормально, буфер по переданному ей указателю не создается. А после функции у тебя сразу стоит if ( errorBuffer ), который сработает если у тебя в errorBuffer будет мусор, и далее вызовется Release несуществующего буфера.

Я думаю в твоем проекте уместно разделить реализацию и интерфейс. Например сделать абстрактный класс и от него наследовать класс реализацию. В абстрактном классе сделать только методы ( чисто виртуальные ). А в реализацию уже добавить все данные-члены. Добавить функцию которая будет создавать объект типа Реализация, но возвращать указатель на класс типа Интерфейс. Так как в этом случае будет использоваться RTTI то указывать dllexport вообще не понадобиться.
Ну или найти другие паттерны которые делают интерфейс и реализацию раздельно. У тебя сейчас очень плохо - класс вообще не защищен, и пользователь может его испортить как угодно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (17.05.2013)