Pantheios没有使用MFC应用程序登录到一个文件包含(一个exe +两个DLL)

时间:2012-04-24 12:58:47

标签: c++ dll mfc pantheios

我有一个由一个exe和两个DLL组成的MFC应用程序。 exe调用这两个DLL的函数。现在我尝试使用Pantheios日志库添加一些日志记录。

我想要达到的目标:
exe和两个DLL都记录在硬盘驱动器中的同一个日志文件中。

以下是我所做的:

1)在主exe程序中使用隐式链接:


#include "stdafx.h"

#include <pantheios/implicit_link/core.h>
#include <pantheios/implicit_link/fe.simple.h>
#include <pantheios/implicit_link/be.file.h>


#define USER_SPECIFIED_LEVEL
#ifndef USER_SPECIFIED_LEVEL
  #include <pantheios/implicit_link/fe.simple.h>
#endif

#ifdef USER_SPECIFIED_LEVEL
PANTHEIOS_CALL(int) pantheios_fe_init(void*   reserved,void**  ptoken)
{
    *ptoken = NULL;
    return 0;
}

PANTHEIOS_CALL(void) pantheios_fe_uninit(void* token)
{}

PANTHEIOS_CALL(PAN_CHAR_T const*)  pantheios_fe_getProcessIdentity  (void *  token)
{
    return PANTHEIOS_LITERAL_STRING(MY_PROGRAM_ID);
}

PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(void* token
                                                  , int   severity
                                                  , int   backEndId)
{
    //SEV_CRITICAL=2 < SEV_ERROR=3 < SEV_WARNING=4 < SEV_INFORMATIONAL=6
    if(severity <= pantheios::SEV_INFORMATIONAL)
        return 1;//allow output for anything above information lvl
    return 0;
}

#endif

在主要的exe程序中,我需要添加我使用的日志记录(在查看PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS之后查看link):

pantheios_be_file_setFilePath(PSTR("C:\\TestLog.log"),**PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS**, 0, PANTHEIOS_BEID_ALL);
        pantheios::log_NOTICE(PSTR("process id: ["), pantheios::processId, PSTR("]"));
    pantheios::log_NOTICE(PSTR("thread id: ["), pantheios::threadId, PSTR("]"));
    pantheios::log_INFORMATIONAL(PSTR("testing log messagse"));

这很好用,我可以按预期登录c:\ TestLog.log文件。但是,我无法在这两个DLL中进行日志记录,它只是为每个日志记录调用提供了错误:

    pantheios::log_INFORMATIONAL(PSTR("testing message"));

说令牌是emtpy,所以我用Google搜索并找到了解决方案:

2)我需要打电话:

pantheios::init();

用于DllMain函数内的每个DLL初始化。这样,当我尝试登录DLL时没有“空令牌”错误,但仍然没有任何日志文件中的DLL记录(再次,主exe程序很好)。

3)我调整了一些东西,我必须更改DLL记录中的日志文件名,以便它们都记录到不同的文件:

DLL#1:

pantheios_be_file_setFilePath(PSTR("C:\\TestLogDll1.log"),PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS, 0, PANTHEIOS_BEID_ALL);

DLL#2:

pantheios_be_file_setFilePath(PSTR("C:\\TestLogDll2.log"),PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS, 0, PANTHEIOS_BEID_ALL);

这样我就有3个记录文件都可以正常工作:

  • 主程序的TestLog.log
  • DLL#1的TestLogDll1.log
  • DLL#2的TestLogDll2.log

但是我仍然无法将两个DLL记录到主exe的同一个文件中(TestLog.log)。

1 个答案:

答案 0 :(得分:0)

要在exe和dll之间共享实体或对象,您可能需要在导出它们的exe中声明__declspec(dllexport),并在导入它们的dll中声明__declspec(dllimport)。

供参考:
1)http://sourceforge.net/projects/pantheios/forums/forum/647484/topic/1639420/index/page/1
2)Use Pantheios logging framework from a dll