Здравствуйте!
У меня есть dll, написанная мной. она содержит классы, в членами в которых являются vector, string, list... , например:
file ext.h
#pragma once
#include <vector>
#include <string>
#if defined(MY_EXT_DLL) // inside DLL
# define EXT_DLL_API __declspec(dllexport)
#else // outside DLL
# define EXT_DLL_API __declspec(dllimport)
#endif
class EXT_DLL_API Point
{
public:
double x;
double y;
Point() : x(0), y(0) {}
Point(double _x, double _y) : x(_x), y(_y) {}
};
class EXT_DLL_API PointArray
{
public:
PointArray();
std::wstring name;
std::vector<Point> pts;
};
file ext.cpp
#include "StdAfx.h"
#include "ext.h"
PointArray::PointArray() {
name = L"Кириллица";
}
при использовании такой dll в exe все нормально - создается объект, уничтожается
void Cstl_dllDlg::OnBnClickedOk()
{
Point p1(22,33);
PointArray pp;
pp.pts.push_back(p1);
pp.pts.push_back(p1);
pp.pts.push_back(p1);
CDialogEx::OnOK();
}
но если подключить библиотеку к arx-приложению, то все падает.
Насколько я искал в интернете вся проблемы с переходом vector, string, list и т.п. через границы библиотеки, то есть создается в одной куче, потом попытка удалить в другой куче. итог - крах.
Прошу вас помочь разобраться. Как добиться, чтобы выделение памяти под все объекты происходило в одной куче?
Заранее спасибо.
Win 7 SP1
MSVS 2010 SP1
Acad 2014