Здравствуйте, kmn, Вы писали:
kmn>Здравствуйте, beldmit, Вы писали:
B>>Если Вы правы, то что с этим предполагается делать? В принципе этот плагин я могу счесть частью основной функциональности и не совать в dll, но нет ли более правильного способа?
kmn>не обращаться к массивам непосредственно
kmn>kmn>template <class TYPE, class ARG_TYPE = const TYPE&>
kmn>class CArrayV
kmn>{
kmn>public:
kmn> virtual int Add(ARG_TYPE v)
kmn> {
kmn> array.Add(v)
kmn> }
kmn>
kmn> virtual int RemoveAll()
kmn> {
kmn> m_array.RemoveAll();
kmn> }
kmn>
kmn>protected:
kmn> CArray<TYPE, ARG_TYPE> m_array;
kmn>};
kmn>
kmn>template <class TYPE, class ARG_TYPE = const TYPE&>
kmn>class CArrayEx
kmn>{
kmn>public:
kmn> int Add(ARG_TYPE v)
kmn> {
kmn> array.Add(v)
kmn> }
kmn>
kmn> int RemoveAll()
kmn> {
kmn> m_array.RemoveAll();
kmn> }
kmn>
kmn>protected:
kmn> CArray<TYPE, ARG_TYPE> m_array;
kmn>};
kmn>
kmn>
kmn>kmn>// EXE
kmn>CArrayV <int, int> arrayV;
kmn>CArrayEx <int, int> arrayEx;
kmn>MyDllFunctionEX(&arrayEx);
kmn>MyDllFunctionV(&arrayV);
kmn>
kmn>arrayEx.RemoveAll(); // Здесь будет бабах
kmn>arrayV.RemoveAll(); // OK
kmn>// DLL
kmn>void MyDllFunctionEX(CArrayEx<int, int> *array)
kmn>{
kmn> array->Add(128);
kmn> array->Add(256);
kmn>}
kmn>void MyDllFunctionV(CArrayEx<int, int> *array)
kmn>{
kmn> array->Add(128);
kmn> array->Add(256);
kmn>}
kmn>
То есть определить виртуальные методы добавления элемента во внутренний массив и удаления всех элементов?