2

我有一个 cpp 项目、一个 cpp cli 项目和 ac# win forms 项目。我在我的 cpp 本机项目中使用 pantheios 日志库。当我尝试写入日志时,出现此错误:

日志错误

这是我的代码:

日志文件

#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

日志文件

#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));

我该如何解决这个错误?

4

1 回答 1

1

恐怕我没有直接的答案给你,但是比较我在我的解决方案中的内容(这在很多方面与你的设置相似 - .NET DLL 调用 C++-native DLL,它具有 Pantheios-logging),这是我所拥有的:

  • 我有一个项目 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;
     }
    

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

于 2012-04-09T17:43:09.477 回答