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


Автор: enginer 8.7.2007, 13:51
доброго времени суток, господа
в общем создаю библиотеку
в ней класс
в классе соответственно функции и переменные
далее подключаю эту либу к ехе и соответственно создаю экземпляр класса описанный в этой самой либе. и тут начинается интересное. функции-члены этого класса не имеют доступа к переменным-членам
вот к примеру:
---
Код

class DLLEXPORT anyclass
{
    public:
       void anyfunc();
       int a;
}
void anyclass::anyfunc()
{
   a = 5; // вываливается исключение
}

---
тут еще один момнт выявился: в release-сборке обоих модулей иссключения стали вываливаться по ваще непонятному принципу, как будто код выполняется не последовательно. теперь я ваще ниче не понимаю :(
чего я такого не знаю что поможет мне все это победить?

Автор: bsa 8.7.2007, 18:31
А ты точно создаешь экземпляр класса до вызова его методов? Попробуй упростить программу (или написать для проверки новую), чтобы экземпляр класса гарантированно создавался до вызова его методов. А то что у тебя очень похоже на вызов методов до инициализации классов. А хаотичность, судя по всему, из-за того, что ты где-то делаешь статическую инициализацию (вне функций).
Есть еще один способ проверки - в конструкторы и деструкторы включи вывод на экран отладочных сообщений (типа this = xxxx создан/удален).

Автор: enginer 8.7.2007, 19:33
в общем я тут доковырялся до того что выяснил некоторые подробности данной баги.
оказывается она возникает только если данный класс является членом другого класса
т.е.:
Код

class someclass // класс в ехе'шнике
{
  public:
    void ();
    anyclass* myclassvar; // класс в длл
};

и соответственно
Код

void someclass::somefunc()
{
  myclassvar->anyfunc();
}

приведет к вышеописсанной ошибке.
в общем жду ваших советов, уважаемые гуру

Автор: bsa 8.7.2007, 19:38
Ты опять меня не понял. Судя по всему проблема в том, что ты сначала не сделал:
Код
myclassvar = new anyclass;

Автор: enginer 8.7.2007, 19:48
хороший ты человек, bsa smile 
Код

myclassvar = new anyclass;

я сделал, только не там где надо :-[
в общем огромное тебе спасибо, ща буду пить за твое здравие smile

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