janardhan2104 Ответов: 2

Как экспортировать макрос функцию из DLL в другую dll файлы?


У меня есть 3 проекта soultions, внутри main soultion, я должен использовать свой файл dll logger другой dll, как экспортировать этот файл в другую dll?пожалуйста, помогите мне.
Проект
---------------
Simple_logger.ч
#pragma once
#include<crtdefs.h>
#include<boost/log/expressions.hpp>
#include<boost/log/expressions/formatters/named_scope.hpp>
#include<boost/log/sources/global_logger_storage.hpp>
#include<boost/log/support/date_time.hpp>
#include<boost/log/trivial.hpp>
#include<boost/log/utility/setup.hpp>
#include<string.h>
#include"Binary_Export.h"

#include <boost/log/sinks/debug_output_backend.hpp>
#define FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
#define  INFO  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__

#define WARN  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::warning) <<  "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__
#define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error) <<  "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__

#define SYS_LOGFILE   "C:\\Users\\janardhanreddyn\\Documents\\LogFile\\Logfile.log"

//Narrow-char thread-safe logger.
typedef boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> logger_t;
 
//declares a global logger with a custom initialization
 BOOST_LOG_GLOBAL_LOGGER(my_logger, logger_t)




Просто Logger.cpp
--------------------


#include"Simple_Logger.h"
namespace logging = boost::log;
namespace sinks = boost::log::sinks;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;
//Defines a global logger initialization routine
BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t)
{
	logger_t lg;

	logging::add_common_attributes();

	logging::add_file_log(
		keywords::file_name = SYS_LOGFILE,
		keywords::rotation_size = 1024 * 1024 * 20,    // megabytes
		keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point (0, 0, 0),
		keywords::auto_flush = true,
		keywords::format = (
		expr::stream<<expr::format_date_time <boost::posix_time::ptime> ("TimeStamp", "%d-%m-%y %H:%M:%S")
		<< " [" << expr::attr <boost::log::trivial::severity_level> ("Severity") << "]: "
		<< expr::smessage

		)
		);

	logging::add_console_log(
		std::cout,
		keywords::format = (
		expr::stream <<"|"<< expr::format_date_time <boost::posix_time::ptime> ("TimeStamp", "%d-%m-%y %H:%M:%S")<<"|"
		<< " [" << expr::attr <boost::log::trivial::severity_level> ("Severity") << "]: "
		<< expr::smessage

		)

		);

	logging::core::get()->set_filter
		(
		logging::trivial::severity >= logging::trivial::info
		);

	return lg;
}


Что я уже пробовал:

еще один проект Б
----------------------
Фабрика.ч
=============
#pragma once
#include"tfexports.h"
#include"Simple_Logger.h"

#include<iostream>
class TF_API AFactory
{

public:
	 AFactory();
	 ~AFactory();
	  virtual void Func();


};



factory.cpp
==============

#include"Factory.h"


AFactory::AFactory()
{

	INFO<<"AFactory Constructor";
}
AFactory::~AFactory()
{


}
void AFactory::Func()
{


	<pre>INFO<<"AFactory Constructor";

}


когда я использовал INFO, только. DLL файл сгенерирован,. lib файл не сгенерирован, для генерации. lib файла мне нужно экспортировать некоторые макросы в другую dll, но я не знаю, как это сделать.

Richard MacCutchan

Вы не можете экспортировать макросы, они преобразуются препроцессором C/C++.

janardhan2104

Спасибо, Ричард.

2 Ответов

Рейтинг:
6

Patrice T

Цитата:
Как экспортировать макрос функцию из DLL в другую dll файлы?

Вы этого не делаете, DLL - это черный ящик, вы не можете перемещать вещи между библиотеками DLL.

Обратите внимание, что макросы C++ не находятся в библиотеках DLL, они являются директивами для компилятора, который создает библиотеки DLL, и они не попадают в библиотеки DLL.

Вам нужно скопировать макросы из исходного кода.


Рейтинг:
12

KarstenK

Ричард прав ты КОСЯК экспорт макросов. Макросы разрешаются в коде на первом шаге процесс построения.

Считать:

а) экспорт функций со всеми необходимыми параметрами.
б) непосредственно скопировать код в другой проект в некоторых дополнительных файлах.

Я бы использовал решение Б), но, возможно, какое-то сочетание этих подходов удовлетворит ваши потребности.