Re[3]: Траблы с CArray
От: kmn Украина  
Дата: 19.12.02 10:58
Оценка:
Здравствуйте, beldmit, Вы писали:


B>Не очень понимаю. Чем это отличается от обычной передачи указателя в функцию dll для модификации? Я скорее поверю в какую-то ошибку в конструкторе CVisit, из-за чего в память пишется фигня. На этом форуме я нашел похожую проблему — тогда симптомы ошибки исчезали после убирания virtual из описания деструктора, а сама ошибка была следствием выхода где-то за пределы массива. Код живет дома, вечером проверю.


B>Если Вы правы, то что с этим предполагается делать? В принципе этот плагин я могу счесть частью основной функциональности и не совать в dll, но нет ли более правильного способа?


не обращаться к массивам непосредственно

template <class TYPE, class ARG_TYPE = const TYPE&>
class CArrayV
{
public:
    virtual int Add(ARG_TYPE v)
       {
            array.Add(v)
       }
     
    virtual int RemoveAll()
       {
            m_array.RemoveAll();
       }


protected:
     CArray<TYPE, ARG_TYPE> m_array;
};


template <class TYPE, class ARG_TYPE = const TYPE&>
class CArrayEx
{
public:
    int Add(ARG_TYPE v)
       {
            array.Add(v)
       }
     
    int RemoveAll()
       {
            m_array.RemoveAll();
       }


protected:
     CArray<TYPE, ARG_TYPE> m_array;
};



// EXE

CArrayV <int, int> arrayV;
CArrayEx <int, int> arrayEx;

MyDllFunctionEX(&arrayEx);
MyDllFunctionV(&arrayV);


arrayEx.RemoveAll(); // Здесь будет бабах
arrayV.RemoveAll();  // OK

// DLL

void MyDllFunctionEX(CArrayEx<int, int> *array)
{
   array->Add(128);
   array->Add(256);
}

void MyDllFunctionV(CArrayEx<int, int> *array)
{
   array->Add(128);
   array->Add(256);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.