关于__LINE__,__FILE__的问题,急!!

blp 2003-09-12 11:59:14
有一个DLL.里面提供一个输出内容到LOG文件函数LogPrint
代码类似如下:
char * srcFile;
int srcLine;
DW_DLL_EXPORT extern int iSourceLine;
#define LogPrintf srcFile = __FILE__;srcLine = __LINE__;LogPrint

在LogPrint函数中会输出错误的文件名和行数

然后在一个 EXE文件中调用LogPrintf。

现在的问题是
以前调用的时候是好的,现在无法打印出来文件名称未空,行数为0。
注:未修改过该DLL,有人说可能跟编译环境有关,请各位高手答疑。


...全文
96 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlebob 2003-09-12
  • 打赏
  • 举报
回复
在EXE中你是怎么调用的?
blp 2003-09-12
  • 打赏
  • 举报
回复
问题确实比较奇怪,因为这个DLL,其它还有很多程序(几乎项目的每一个程序)调用它,可是却没有出现问题
whoo 2003-09-12
  • 打赏
  • 举报
回复
__FILE__;__LINE__;编译的时候会转换成硬编码。没有理由跟exe编译环境有关。

还是检查你的dll吧。
blp 2003-09-12
  • 打赏
  • 举报
回复
问题找到了,是我调用的时候写错了,没有调用define定义的,
而是直接调用了dll的函数,谢谢大家的回答。
blp 2003-09-12
  • 打赏
  • 举报
回复
cpp部分
#include "DwLogFile.h"

void __stdcall DwLogPrintf(const char *pLogMessage)
{
//文件输出部分
...
}
blp 2003-09-12
  • 打赏
  • 举报
回复
头文件DwLogFile.h
#ifndef _DWLOGFILE_H_
#define _DWLOGFILE_H_

#ifdef DWLOGFILE_EXPORTS
#undef DW_DLL_EXPORT
#define DW_DLL_EXPORT __declspec(dllexport)
#else
#undef DW_DLL_EXPORT
#define DW_DLL_EXPORT __declspec(dllimport)
#endif

DW_DLL_EXPORT extern char *pSourceFile;
DW_DLL_EXPORT extern int iSourceLine;
DW_DLL_EXPORT void __stdcall DwLogPrintf(const char *pLogMessage)
#define DwLOGPrintf pSourceFile = __FILE__; iSourceLine = __LINE__; DwLogPrintf
littlebob 2003-09-12
  • 打赏
  • 举报
回复
最好把关键部分的代码贴出来,就这么一点没法看出原因
你说这些定义是在DLL中的,宏又怎么在DLL中呢? 要么是在DLL的头文件中定义的
但是如果是在DLL的头文件中定义的,当你EXE包含DLL头文件的时候,这时的srcFile srcLine已经不再是DLL中的那两个变量,而是EXE中新的两个变量,DLL中的函数同样无法直接访问!
limd 2003-09-12
  • 打赏
  • 举报
回复
这个__FILE__,__LINE__是在编译的时候由编译程序编译时控制的吧
blp 2003-09-12
  • 打赏
  • 举报
回复
这段定义都是在DLL中的。
char * srcFile;
int srcLine;
#define LogPrintf srcFile = __FILE__;srcLine = __LINE__;LogPrint

LogPrint中应该能够得到srcFile,srcLine.
而且其他程序中调用也不用传__FILE__,__LINE__。
littlebob 2003-09-12
  • 打赏
  • 举报
回复
怪不得,怪不得
你不把__LINE__和__FILE__传递给LogPrint函数, LogPrint函数又怎么能知道在哪个文件哪一行呢,LogPrint在动态连接库里,它是无法直接访问srcFile srcLine变量的!
blp 2003-09-12
  • 打赏
  • 举报
回复
程序都是这样调用,包括在这个exe中,他还调用到另外一个发送邮件dll的SendMail,在SendMail函数中也调用了LogPrintf函数,可是我用这个EXE调用SendMail出错的话,却能正确输出文件名称和行数
blp 2003-09-12
  • 打赏
  • 举报
回复
直接用
LogPrintf("错误信息");

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧