Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
Pantheios not logging into one file with MFC app comprise (one exe + two DLLs)
我有一个由一个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程序中(在SO中查看此链接后谈论PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS
):
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,所以我用谷歌搜索并找到了一个解决方案:
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 个日志文件都可以正常工作:
- 测试日志.log用于主程序
- TestLogDll1.log for DLL #1
- TestLogDll2.log for DLL #2
但是我仍然无法将两个 DLL 记录到与主可执行文件相同的文件中(TestLog.log)。
要在 exe 和 dll 之间共享实体或对象,您可能需要在导出它们的 exe 中声明 __declspec(dllexport),在导入它们的 dll 中声明__declspec(dllimport)。
供参考:
1) http://sourceforge.net/projects/pantheios/forums/forum/647484/topic/1639420/index/page/1
2)从dll使用Pantheios日志记录框架
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?