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


Автор: maksr 26.7.2007, 18:14
Вот класс на экспорт:

Код

class __declspec(dllexport) Test1
{
  private:
    DWORD mTemp1;
    UINT mVE;
    bool mIsLoaded;
  
  public:
    Test1();
    ~Test1();
    
    void load();
    void unload();
};


Этот класс на импорт:

Код

class __declspec(dllimport) Test1
{
  public:
    Test1();
    ~Test1();
   
    void load();
    void unload();   
};


Если объявить переменную данного класса как глобальную всё работает, если же объявить её как указатель либо локальную то при удалении её из памяти велезает ошибка о том, что читаем за пределами heap памяти.

Автор: Earnest 26.7.2007, 18:29
Насчет "локальной" есть сомнения, что ты напутал - при чем здесь heap.
А вот если указатель на динамическую память, то видимо, ты удаляешь ее не там, где создаешь (т.е. создает вызов из одного модуля, а удаляет - из другого). И, похоже, модули используют разные хипы. Так бывает, если, например, два модуля статически слинкованы с рантаймами.
Лучшее решение вопроса - использовать единую DLL-версию рантайма. Тогда с созданием\удалением проблем не будет.
Или  - придется всю жисть следить, чтобы переменные удалялиь тем же кодом, где и создаются. Т.е. предусмотреть статические функции Create и Delete и запретить явный вызов конструкторов\деструкторов.

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