Передача объектов STL и / или MFC между модулями

У меня довольно большая база кода, которая очень модульная (много-много плагинов), и очень часто требуется передавать строки и тому подобное между модулями. Для справки: код:

  • компилируется только в MSVC / Visual Studio и явно не поддерживает и не будет поддерживать другие компиляторы. Поддерживать их - не проблема.
  • работает только в Windows и совершенно очевидно не поддерживает и не будет поддерживать другие операционные системы. То же, что и выше.
  • все модули будут своего рода Windows PE; предполагают одинаковую разрядность и что они созданы для одной платформы.
  • Есть несколько мест, где MFC проще использовать, а некоторые - где STL. Очень высока вероятность того, что оба будут использоваться в каждом модуле.
  • Вопрос только относительно передачи объектов между модулями.

У меня сложилось впечатление, что передача объектов STL между модулями может действительно сломаться, если версия библиотеки или компилятора изменится. В частности, когда дело доходит до dtors и уничтожения объектов вне модуля / версии, в которой они были созданы.

Является ли MFC более безопасным в этом смысле? Можно ли безопасно передать объект MFC (например, CString ) из Base.dll в Plugin.dll? Вам нужно передать указатель, разве вы не можете безопасно удалить его из подключаемого модуля?

Имеет ли значение, если MFC статически связан или используется из библиотеки DLL?

MSDN упоминает в нескольких местах, что:

Все распределение памяти внутри обычной DLL должно оставаться в пределах DLL; DLL не должна передавать или получать от вызывающего исполняемого файла любое из следующего:

  • указатели на объекты MFC
  • указатели на память, выделенную MFC

Если вам нужно сделать что-либо из вышеперечисленного, или если вам нужно для передачи объектов, производных от MFC, между вызывающим исполняемым файлом и DLL необходимо создать DLL расширения.

Однако библиотеки DLL расширения страницы упоминают, что они предназначены в первую очередь для реализованных объектов, производных от объектов MFC. Мне это неинтересно, я просто использую их и переключаюсь между различными модулями.

Изменяет ли передача shared_ptrs что-нибудь (или класс с виртуальным dtor)?

Есть ли решение, не прибегая к типам C?

6
задан ssube 23 September 2011 в 19:23
поделиться