我有一个 Logging 类,可以简化为:
template <int TARGET>
struct Logging
{
static ostream * sOstream;
static void log(const char * _txt);
static void set_log_file(const char * _file_name)
{
sOstream = new ofstream(_file_name);
}
}
整个事情在单个二进制文件中运行良好。Logging<TARGET_DEBUG>::log("some message");
但是,在调用Logging<TARGET_DEBUG>::set_log_file(someFilePath.c_str());
使用该 DLL 的可执行文件之后,我希望 /like/ 能够在 DLL 中使用。最初,它不起作用,因为我没有使用__declspec(dllexport)
. 但是,当我将适当的宏添加到日志记录类定义(仅限标头)时,我会收到一系列错误消息:
警告 C4273: 'sOstream' : 不一致的 dll 链接 // 为什么指针会出现这种情况?
错误 C2491:“Logging::sOstream”:不允许定义 dllimport 静态数据成员
应用程序中的各种其他类都可以毫无问题地导出/导入,但这是我试图在二进制文件之间共享的唯一模板化类。这不是我过于熟悉的领域:我怎样才能根据需要进行这项工作?请注意,EXE 包括带有 的 Logging 结构,带有带有__declspec(dllimport)
的 DLL__declspec(dllexport)