Cpp Pantheios日志库,调试断言失败错误

时间:2012-03-12 09:37:23

标签: c++ .net c++-cli logging pantheios

我有一个cpp项目,一个cpp cli项目和一个c#win表单项目。 我在我的cpp原生项目中使用pantheios日志库。当我尝试写日志时,我接受了这个错误:

Log Error

这是我的代码:

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();
        };
    }
}
#endif

Log.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));

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

我担心我没有直接的答案,但比较我的解决方案(在许多方面与您的设置类似 - .NET DLL调用C ++ - 本机DLL,其中有Pantheios-记录),这就是我所拥有的:

  • 我有一个项目LOG,它有一个InitInstance()和ExitInstance()(和CWinApp派生类的ctors - CLogApp)
  • CLogApp ctor / dtor是空的
  • InitInstance()和ExitInstance()中的代码:

    BOOL CLogApp::InitInstance()
    {
        CWinApp::InitInstance();
    
        int panres =  pantheios::pantheios_init();
    
        if( panres < 0 )
        {
            OutputDebugStringA("Could not initialise the Pantheios logging libraries!\n");
            util::onBailOut(pantheios::emergency, "Failed to initialise the Pantheios libraries", PANTHEIOS_FE_PROCESS_IDENTITY, /*pantheios::*/pantheios_getInitCodeString(panres));
    
           return 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("STARTING LOGGING");
         }
    
         return TRUE;
     }
    
     int CLogApp::ExitInstance()
     {
         PANTHEIOS_TRACE_NOTICE("STOPPING LOGGING");
         pantheios_uninit();
         return 0;
     }
    

我不确定这是否会有所帮助,但这段代码已经为我工作多年了。