Вы можете попробовать использовать функцию wp_redirect()
, предоставляемую WordPress.
Пример:
wp_redirect( $url );
exit;
Подробнее здесь: https://developer.wordpress.org/reference/functions/wp_redirect/
Я не знаю, подходит ли это решение для способа решения этой проблемы, но у нас была аналогичная проблема со статической регистрацией фабрики объектов, и в Visual Studio мы решили ее, объявив классов, связанных с __declspec (dllexport), это было необходимо, даже если задействованные библиотеки не были dll. Но без этого компоновщик пропустил бы классы, на которые нет ссылок.
Реестр, который мы работали, немного отличался и не задействовал выделенные стеком объекты. Я поднял детали из CPP-блока, именно там я обнаружил подход __declspec iirc.
[править] Нам также пришлось #include
объявление для зарегистрированного класса из некоторой части кода.
Поскольку это статическая библиотека, вы можете подумать о том, чтобы менеджер регистрировал плагины (вместо того, чтобы сами плагины регистрировались). Заголовочный файл может определять некоторый символ препроцессора (например, JPEG_PLUGIN), который определяет, будет ли менеджер регистрировать подключаемый модуль на основе включения заголовка:
#include "JpegPlugin.h" void PluginManager::RegisterPlugins() { #idef JPEG_PLUGIN RegisterPlugin(&jpeg_instance); #endif }
JpegPlugin.h не обязательно должен включать определение JpegPlugin. Это может быть что-то вроде этого:
#ifndef JPEG_PLUGIN_HEADER #define JPEG_PLUGIN_HEADER #if 0 // change this to 1 to use the plugin #define JPEG_PLUGIN #include "Jpeg_PluginCls.h" #endif #endif
Это продолжение ответа Харальда Шейриха .
Я поэкспериментировал, и похоже, что режим выпуска MSVC ++ 2005 (но не режим отладки) будет включите флаг / OPT: REF
для компоновщика, который, согласно документации LINK , приведет к удалению любых символов без ссылок из окончательного EXE. И веб-страница для __ declspec (selectany)
, похоже, указывает на то, что конструкторы для глобальных объектов не рассматриваются как ссылки на объект (неправильно, IMHO, но вот он у вас). Итак, я предполагаю, что эта проблема «уходит» для отладочных сборок - это правильно?
Итак, я думаю, что предложение Харальда об использовании __ declspec (dllexport)
- удобный способ пометить символ как "