Объектная регистрация в статической библиотеке

Вы можете попробовать использовать функцию wp_redirect(), предоставляемую WordPress.

Пример:

wp_redirect( $url );
exit;

Подробнее здесь: https://developer.wordpress.org/reference/functions/wp_redirect/

7
задан beef2k 17 May 2009 в 01:57
поделиться

3 ответа

Я не знаю, подходит ли это решение для способа решения этой проблемы, но у нас была аналогичная проблема со статической регистрацией фабрики объектов, и в Visual Studio мы решили ее, объявив классов, связанных с __declspec (dllexport), это было необходимо, даже если задействованные библиотеки не были dll. Но без этого компоновщик пропустил бы классы, на которые нет ссылок.

Реестр, который мы работали, немного отличался и не задействовал выделенные стеком объекты. Я поднял детали из CPP-блока, именно там я обнаружил подход __declspec iirc.

[править] Нам также пришлось #include объявление для зарегистрированного класса из некоторой части кода.

2
ответ дан 7 December 2019 в 12:24
поделиться

Поскольку это статическая библиотека, вы можете подумать о том, чтобы менеджер регистрировал плагины (вместо того, чтобы сами плагины регистрировались). Заголовочный файл может определять некоторый символ препроцессора (например, 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
2
ответ дан 7 December 2019 в 12:24
поделиться

Это продолжение ответа Харальда Шейриха .

Я поэкспериментировал, и похоже, что режим выпуска MSVC ++ 2005 (но не режим отладки) будет включите флаг / OPT: REF для компоновщика, который, согласно документации LINK , приведет к удалению любых символов без ссылок из окончательного EXE. И веб-страница для __ declspec (selectany) , похоже, указывает на то, что конструкторы для глобальных объектов не рассматриваются как ссылки на объект (неправильно, IMHO, но вот он у вас). Итак, я предполагаю, что эта проблема «уходит» для отладочных сборок - это правильно?

Итак, я думаю, что предложение Харальда об использовании __ declspec (dllexport) - удобный способ пометить символ как "

1
ответ дан 7 December 2019 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: