我有一个cpp项目,一个cli项目和一个c# win forms项目。我在cpp原生项目中使用pantheios日志库。当我尝试写日志时,我会遇到这样的错误:

下面是我的代码:
Log.hpp
#ifndef INCLUDE_LOG_HPP
#define INCLUDE_LOG_HPP
#define PANTHEIOS_NO_INCLUDE_OS_AND_3PTYLIB_STRING_ACCESS // Faster compilation
/* Pantheios Header Files */
#include <pantheios/pantheios.hpp> // Pantheios C++ main header
#include <pantheios/inserters/args.hpp> // for pantheios::args
#include <pantheios/backends/bec.file.h> // be.file header
#include "Include/utility.hpp"
/* Standard C/C++ Header Files */
#include <exception> // for std::exception
#include <new> // for std::bad_alloc
#include <string> // for std::string
#include <stdlib.h>
#include <sstream>
#define PSTR(x) PANTHEIOS_LITERAL_STRING(x)
namespace Mtx
{
namespace log
{
class MTXMANAGER Logger
{
public:
void WriteLogIn(const std::string & log_text);
Logger();
~Logger();
};
}
}
#endifLog.cpp
#include "Log.hpp"
namespace Mtx
{
namespace log
{
PANTHEIOS_EXTERN_C const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("mtx");//
Logger::Logger()
{
char path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );
std::string::size_type pos = std::string( path ).find_last_of( "\\" );
strcpy(path,std::string( path ).substr( 0, pos).c_str());
std::strcat (path,"\\mtx-%D__.log");
/////
pantheios_be_file_setFilePath(PSTR(path), PANTHEIOS_BE_FILE_F_TRUNCATE, PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS, PANTHEIOS_BEID_ALL);
}
Logger::~Logger()
{
}
void Logger::WriteLogIn(const std::string & log_text)
{
pantheios::log_INFORMATIONAL(PSTR(" [1] "),PSTR(log_text));
}
}
}我把错误放在下面这一行:
pantheios::log_INFORMATIONAL(PSTR(" [1] "),PSTR(log_text));如何修复此错误?
发布于 2012-04-10 01:43:09
恐怕我不能直接回答您,但比较我的解决方案(在许多方面类似于您的setup - .NET DLL调用C++本机DLL,后者具有Pantheios日志记录),下面是我所拥有的:
我有一个项目日志,其中有一个InitInstance()和ExitInstance() (CWinApp派生类的ctor-
BOOL CLogApp::InitInstance() { CWinApp::InitInstance();libraries= pantheios::pantheios_init();if( panres <0){OutputDebugStringA(“无法初始化Pantheios记录库!\n”);util::onBailOut( Pantheios::/*pantheios::*/pantheios_getInitCodeString(panres));,“初始化Pantheios库失败”,PANTHEIOS_FE_PROCESS_IDENTITY,util返回FALSE;} else { pantheios_be_file_setFilePath(CErrorHandler::getLogPath().c_str(),PANTHEIOS_BE_FILE_F_TRUNCATE,PANTHEIOS_BE_FILE_F_TRUNCATE,PANTHEIOS_BEID_LOCAL);PANTHEIOS_TRACE_NOTICE(“开始记录”);}返回TRUE;} int CLogApp::ExitInstance() {PANTHEIOS_TRACE_NOTICE(“停止记录”);pantheios_uninit();返回0;}
我不确定这是否会有帮助,但这段代码已经为我工作了很多年。
https://stackoverflow.com/questions/9664626
复制相似问题