关于__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,有人说可能跟编译环境有关,请各位高手答疑。


...全文
103 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("错误信息");
FILE__) . '/includes/init.php'); if(trim($_GET['ac']) == 'del') { deletetable('bug', "id='$_GET[bug_id]'"); goto($_SESSION['php_self']); } $_SESSION['php_self'] = geturl(); //echo $_SESSION['php_self']; $pro_id = empty($_GET['pro_id'])?'':intval($_GET['pro_id']); $bug_id = empty($_GET['bug_id'])?'':intval($_GET['bug_id']); $types = set_supetype($_SESSION['supe_type']); $sql = "SELECT * FROM ".tname('project')." WHERE `father` = '$pro_id'"; $pro_list = $db->getAll($sql); $sql = "SELECT pro_name, father, pro_id FROM ".tname('project')." WHERE `pro_id` = '$pro_id'"; $pro_info = $db->getRow($sql); if(!($_SESSION['supe_username'] and (($_SESSION['supe_project']!=$pro_info['pro_id'] ? $_SESSION['supe_project']==$pro_info['father'] : 1) or $_SESSION['supe_type']==-1))) { goto("login.php?pro_id=$pro_id"); } $sql = "SELECT pro_name FROM ".tname('project')." WHERE `pro_id` = '$pro_id'"; $pro_name = $db->getOne($sql); if($bug_id) { $sql = "select * from ".tname('bug')." where id='$bug_id'"; $bug = $db->getRow($sql); } if($_POST['submit']) { if($_POST['bug_id']) { if($_POST['pro_id']) { $pro_id = $_POST['pro_id']; } $sqlarr = array( 'pro_id' => $pro_id, 'title' => $_POST['title'], 'quick' => $_POST['quick'], 'bug' => $_POST['bug'] ); updatetable('bug', $sqlarr, "id='$_POST[bug_id]'"); } else { if($_POST['pro_id']) { $pro_id = $_POST['pro_id']; } $sqlarr = array( 'pro_id' => $pro_id, 'name' => $_SESSION['supe_username'], 'title' => $_POST['title'], 'quick' => $_POST['quick'], 'bug' => $_POST['bug'], 'dateline' => NOW ); inserttable('bug', $sqlarr); } goto("bug_list.php?pro_id=$pro_id"); } ?> <?=$_CFG['site_name']?> <script type="text/javascript" charset="utf-8" src="includes/editer/kindeditor.js"> KE.show({ id : 'bug', cssPath : './css/editer.css', items : [ 'undo', 'redo', 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'image', 'source'] }); function checkuser(frm) { with(frm) { if (title.value.length < 1) { alert('标题不能为空'); title.focus(); return false; } } }
发布人:
项目选择:
标题:
迫切度:
问题

16,472

社区成员

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

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

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