Библиотека журнала Cpp Pantheios, ошибка отладочного подтверждения - PullRequest
2 голосов
/ 12 марта 2012

У меня есть проект cpp, проект cpp cli и проект c # win. Я использую библиотеку журналов pantheios в своем родном проекте cpp. Когда я пытаюсь записать журнал, я получаю эту ошибку:

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 Ответ

1 голос
/ 09 апреля 2012

Боюсь, у меня нет прямого ответа для вас, но я сравниваю то, что у меня есть в моем решении (которое во многих отношениях похоже на вашу установку - .NET DLL, вызывающую C ++ - нативную DLL, в которой есть Pantheios- ведение журнала), вот что у меня есть:

  • У меня есть проект LOG, который имеет InitInstance () и ExitInstance () (и ctors для класса, производного от CWinApp - 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;
     }
    

Я не уверен, поможет ли это, но этот код работает для меня уже много лет.

...