std::vector "за границей" arx

Автор Тема: std::vector "за границей" arx  (Прочитано 6141 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ДДВАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
std::vector "за границей" arx
« : 25-11-2016, 15:00:40 »
Здравствуйте!
У меня есть dll, написанная мной. она содержит классы, в членами в которых являются vector, string, list... , например:
file ext.h
Код - C++ [Выбрать]
  1. #pragma once
  2.  
  3. #include <vector>
  4. #include <string>
  5.  
  6. #if defined(MY_EXT_DLL) // inside DLL
  7. #   define EXT_DLL_API __declspec(dllexport)
  8. #else // outside DLL
  9. #   define EXT_DLL_API __declspec(dllimport)
  10. #endif
  11.  
  12. class EXT_DLL_API Point
  13. {
  14. public:
  15.   double x;
  16.   double y;
  17.   Point() : x(0), y(0) {}
  18.   Point(double _x, double _y) : x(_x), y(_y) {}
  19. };
  20.  
  21. class EXT_DLL_API PointArray
  22. {
  23. public:
  24.   PointArray();
  25.   std::wstring name;
  26.   std::vector<Point> pts;
  27. };

file ext.cpp
Код - C++ [Выбрать]
  1. #include "StdAfx.h"
  2. #include "ext.h"
  3.  
  4. PointArray::PointArray() {
  5.   name = L"Кириллица";
  6. }
  7.  


при использовании такой dll в exe все нормально - создается объект, уничтожается
Код - C++ [Выбрать]
  1. void Cstl_dllDlg::OnBnClickedOk()
  2. {
  3.   Point p1(22,33);
  4.   PointArray pp;
  5.   pp.pts.push_back(p1);
  6.   pp.pts.push_back(p1);
  7.   pp.pts.push_back(p1);
  8.   CDialogEx::OnOK();
  9. }
  10.  
но если подключить библиотеку к arx-приложению, то все падает.
Насколько я искал в интернете вся проблемы с переходом vector, string, list и т.п. через границы библиотеки, то есть создается в одной куче, потом попытка удалить в другой куче. итог - крах.

Прошу вас помочь разобраться. Как добиться, чтобы выделение памяти под все объекты происходило в одной куче?
Заранее спасибо.

Win 7 SP1
MSVS 2010 SP1
Acad 2014

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: std::vector "за границей" arx
« Ответ #1 : 25-11-2016, 19:23:23 »
Прошу вас помочь разобраться. Как добиться, чтобы выделение памяти под все объекты происходило в одной куче?
Как минимум опции компилятора для этой DLL должны быть точно такие же, как и для arx.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение