Я строю DLL для использования внутри (ForexTester6). Мой DLL работает без spdlog , но не работает, когда я включаю spdlog . Я добавил директиву SPDLOG_COMPILED_LIB Preproccessor в соответствии с некоторой документацией в Интернете и заметил, что spdlog теперь дополняется DLL. Все хорошо и хорошо, но мне нужен Spdlog, чтобы содержать в моем первоначальном DLL. Как я могу достичь этого? Я новичок в spdlog и установил его с помощью vcpkg install spdlog: x86-windows .
Мой упрощенный код:
(ft5holygrail.h)
>>#pragma once
#ifndef FT5HOLYGRAIL_H_
#define FT5HOLYGRAIL_H_
#define NOMINMAX
#include
#include
#include
#include
#include "IndicatorInterfaceUnit.h"
#include "TechnicalFunctions.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/spdlog.h"
#endif
< /code>
(ft5holygrail.cpp)
#ifndef FT5HOLYGRAIL_H_
#include "FT5HolyGrail.h"
#endif
using namespace std::chrono_literals;
TIndexBuffer PivotHighBuffer, PivotLowBuffer;
bool logging_initialised = false;
EXPORT int __stdcall Init()
{
IndicatorShortName("FT6-HolyGrail");
SetOutputWindow(ow_SeparateWindow);
IndicatorBuffers(2);
PivotHighBuffer = CreateIndexBuffer();
SetIndexBuffer(0, PivotHighBuffer);
SetIndexStyle(0, ds_None, psSolid, 1, clRed);
SetIndexLabel(0, "High Target");
PivotLowBuffer = CreateIndexBuffer();
SetIndexBuffer(1, PivotLowBuffer);
SetIndexStyle(1, ds_None, psSolid, 1, clBlue);
SetIndexLabel(1, "Low Target");
if (!logging_initialised)
{
try
{
const std::string log_path = "C:\\ForexTester6\\LOGS\\HolyGrail.log";
const size_t max_file_size = 1024 * 1024 * 5; // 5 MB
const size_t max_files = 3;
auto file_sink = std::make_shared(log_path, max_file_size, max_files);
auto logger = std::make_shared("default", file_sink);
spdlog::register_logger(logger);
spdlog::set_default_logger(logger);
spdlog::set_level(spdlog::level::trace);
// Set the logging pattern.
// [%Y-%m-%d %H:%M:%S.%f] = Timestamp
// [%l] = Log level (e.g., info, debug)
// [%!] = Source function name
// [%v] = The log message
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%f] [%l] [%!] %v");
spdlog::flush_on(spdlog::level::trace);
logging_initialised = true;
spdlog::info("Logging system initialized successfully.");
}
catch (const spdlog::spdlog_ex &ex)
{
return -1;
}
}
spdlog::debug("Init() completed.");
return 0;
}
EXPORT void __stdcall Done()
{
spdlog::shutdown();
}
EXPORT void __stdcall OnParamsChange()
{
Done();
Init();
}
EXPORT void __stdcall Calculate(int index)
{
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... tained-dll
Spdlog в самостоятельном DLL ⇐ C++
Программы на C++. Форум разработчиков
1757259566
Anonymous
Я строю DLL для использования внутри (ForexTester6). Мой DLL работает без [b] spdlog [/b], но не работает, когда я включаю [b] spdlog [/b]. Я добавил директиву SPDLOG_COMPILED_LIB Preproccessor в соответствии с некоторой документацией в Интернете и заметил, что [b] spdlog [/b] теперь дополняется DLL. Все хорошо и хорошо, но мне нужен Spdlog, чтобы содержать в моем первоначальном DLL. Как я могу достичь этого? Я новичок в [b] spdlog [/b] и установил его с помощью vcpkg install spdlog: x86-windows .
Мой упрощенный код:
(ft5holygrail.h)
>>#pragma once
#ifndef FT5HOLYGRAIL_H_
#define FT5HOLYGRAIL_H_
#define NOMINMAX
#include
#include
#include
#include
#include "IndicatorInterfaceUnit.h"
#include "TechnicalFunctions.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/spdlog.h"
#endif
< /code>
(ft5holygrail.cpp)
#ifndef FT5HOLYGRAIL_H_
#include "FT5HolyGrail.h"
#endif
using namespace std::chrono_literals;
TIndexBuffer PivotHighBuffer, PivotLowBuffer;
bool logging_initialised = false;
EXPORT int __stdcall Init()
{
IndicatorShortName("FT6-HolyGrail");
SetOutputWindow(ow_SeparateWindow);
IndicatorBuffers(2);
PivotHighBuffer = CreateIndexBuffer();
SetIndexBuffer(0, PivotHighBuffer);
SetIndexStyle(0, ds_None, psSolid, 1, clRed);
SetIndexLabel(0, "High Target");
PivotLowBuffer = CreateIndexBuffer();
SetIndexBuffer(1, PivotLowBuffer);
SetIndexStyle(1, ds_None, psSolid, 1, clBlue);
SetIndexLabel(1, "Low Target");
if (!logging_initialised)
{
try
{
const std::string log_path = "C:\\ForexTester6\\LOGS\\HolyGrail.log";
const size_t max_file_size = 1024 * 1024 * 5; // 5 MB
const size_t max_files = 3;
auto file_sink = std::make_shared(log_path, max_file_size, max_files);
auto logger = std::make_shared("default", file_sink);
spdlog::register_logger(logger);
spdlog::set_default_logger(logger);
spdlog::set_level(spdlog::level::trace);
// Set the logging pattern.
// [%Y-%m-%d %H:%M:%S.%f] = Timestamp
// [%l] = Log level (e.g., info, debug)
// [%!] = Source function name
// [%v] = The log message
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%f] [%l] [%!] %v");
spdlog::flush_on(spdlog::level::trace);
logging_initialised = true;
spdlog::info("Logging system initialized successfully.");
}
catch (const spdlog::spdlog_ex &ex)
{
return -1;
}
}
spdlog::debug("Init() completed.");
return 0;
}
EXPORT void __stdcall Done()
{
spdlog::shutdown();
}
EXPORT void __stdcall OnParamsChange()
{
Done();
Init();
}
EXPORT void __stdcall Calculate(int index)
{
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79758201/spdlog-within-a-self-contained-dll[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия