异常信息显示的问题 我用vc++做了个捕获异常的程序,可为什么在dos窗口显示的信息不是英文而是汉字呢?如何把汉字改成英文呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 setlocale()方法好像是避免乱码用的。我是不想在dos中显示中文的异常信息,而是想显示英文的 我是这样写的,显示在dos窗口上的信息我想要英文的,不想要文字的,谢谢 try { .... } catch(_com_error e) { printf("EplsClientCompact.Main exception:%s",(char*)e.ErrorMessage()); } 我用的是vc++ 6.0 mfc 是不是不应该用 _com_error 这个呀 在printf之前加两行#undef LANG_NEUTRAL#define LANG_NEUTRAL 0x09在printf之后加两行#undef LANG_NEUTRAL#define LANG_NEUTRAL 0x00 还是不好用呀。我是日文系统,出的msg是“EplsClientCompact.Main exception:エラーを特定できません”,代码我这么写的。#include "stdafx.h"#include "EplsClientCompact.h"#include "EplsClient.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif#import "msxml3.dll"try { .....} catch(_com_error e) { exitCode = 4; #undef LANG_NEUTRAL #define LANG_NEUTRAL 0x09 printf("EplsClientCompact.Main exception:%s",(char*)e.ErrorMessage()); #undef LANG_NEUTRAL #define LANG_NEUTRAL 0x00} 日文系统试试这样。#undef LANG_NEUTRAL#define LANG_NEUTRAL LANG_ENGLISHprintf();#undef LANG_NEUTRAL#define LANG_NEUTRAL 0x00如果不行把printf那行换成如下代码char MsgBuf[512] = {0};FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e.Error(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) MsgBuf, 512, NULL );然后MsgBuf中的字串就是你要的东西了。 你可以把MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),中的LANG_NEUTRAL直接换成你要的语言码。比如英语是LANG_ENGLISH。前后的那4行#define和#undef就可以不要了。 英文出来了,不过怎么出个“EplsClientCompact.Main exception:Unspecified error”这个信息呢?不过我会先给你40分的。 我估计是因为你的COM运行系统是日文版的。所以得不到有关COM的英文描述。有两个办法。1:把程序部署到英文的系统中。2:手工建立一个HRESULT对错误描述的MAP。通过得到的HRESULT来查对应的描述。 你可以在winerror.h这个文件中找到HRESULT和对应的描述。不知道你用的VS是什么版的。如果是日文的是不是描述也是日文的?不清楚。不过这个文件在网上应该很容易找到。用MAP有一个好处。就是随时可以扩展新的HRESULT定义。 不好意思,刚才去吃饭了,我用的是英文版的vs,不过操作系统是日文的,也就是说,我的代码也只能这么写了,不能再通过代码来改变msg了? 恐怕不能了。你可以写一段程序把FormatMessage中的e.Error()换成其它的HRESULT值试试。如果其它的HRESULT也不行那就是这个问题了 兄弟,分都给你了,接到了吧,能不能给我一个看其他HRESULT值的代码,我不太会写,第一次作c的程序 // MessageId: OLE_E_OLEVERB// MessageText:// Invalid OLEVERB structure#define OLE_E_OLEVERB _HRESULT_TYPEDEF_(0x80040000L)// MessageId: OLE_E_ADVF// MessageText:// Invalid advise flags#define OLE_E_ADVF _HRESULT_TYPEDEF_(0x80040001L)// MessageId: OLE_E_ENUM_NOMORE// MessageText:// Can't enumerate any more, because the associated data is missing#define OLE_E_ENUM_NOMORE _HRESULT_TYPEDEF_(0x80040002L)// MessageId: OLE_E_ADVISENOTSUPPORTED// MessageText:// This implementation doesn't take advises#define OLE_E_ADVISENOTSUPPORTED _HRESULT_TYPEDEF_(0x80040003L)上面这几个都是HRESULT的码。OLE_E_???????????????????是定义的名字,_HRESULT_TYPEDEF_(0x????????L)里括住的是16进制的代码。MessageText下面写的是他们的描述 怎么启动托盘程序 软件更新模块应该怎么做-50分 【HOOK RECV的困惑】 我在视图上有多种不同颜色组成的图。我想当鼠标移到某一点上,获取图的信息? 在MFC單文檔程序中如何做出像VC++一樣的界面? memcpy拷贝结构体的问题 窗口关联的问题 调用ADO,在hr = m_pConnection->Open("...","","",adModeUnknown);时候出错! 怎样把jpg文件转换为bmp文件 ActiveX控件嵌入网页? 我想输出补0,为何运行后补的是一个很大的数?求助! CString转换的简单问题
try {
.... } catch(_com_error e) {
printf("EplsClientCompact.Main exception:%s",(char*)e.ErrorMessage());
}
在printf之前加两行
#undef LANG_NEUTRAL
#define LANG_NEUTRAL 0x09在printf之后加两行
#undef LANG_NEUTRAL
#define LANG_NEUTRAL 0x00
#include "EplsClientCompact.h"
#include "EplsClient.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#import "msxml3.dll"try {
.....
} catch(_com_error e) {
exitCode = 4;
#undef LANG_NEUTRAL
#define LANG_NEUTRAL 0x09
printf("EplsClientCompact.Main exception:%s",(char*)e.ErrorMessage());
#undef LANG_NEUTRAL
#define LANG_NEUTRAL 0x00
}
试试这样。
#undef LANG_NEUTRAL
#define LANG_NEUTRAL LANG_ENGLISH
printf();
#undef LANG_NEUTRAL
#define LANG_NEUTRAL 0x00如果不行把printf那行换成如下代码
char MsgBuf[512] = {0};
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
e.Error(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) MsgBuf,
512,
NULL );
然后MsgBuf中的字串就是你要的东西了。
有两个办法。
1:把程序部署到英文的系统中。
2:手工建立一个HRESULT对错误描述的MAP。通过得到的HRESULT来查对应的描述。
不知道你用的VS是什么版的。如果是日文的是不是描述也是日文的?不清楚。
不过这个文件在网上应该很容易找到。用MAP有一个好处。就是随时可以扩展新的HRESULT定义。
你可以写一段程序把FormatMessage中的e.Error()换成其它的HRESULT值试试。
如果其它的HRESULT也不行那就是这个问题了
// MessageText:
// Invalid OLEVERB structure
#define OLE_E_OLEVERB _HRESULT_TYPEDEF_(0x80040000L)// MessageId: OLE_E_ADVF
// MessageText:
// Invalid advise flags
#define OLE_E_ADVF _HRESULT_TYPEDEF_(0x80040001L)// MessageId: OLE_E_ENUM_NOMORE
// MessageText:
// Can't enumerate any more, because the associated data is missing
#define OLE_E_ENUM_NOMORE _HRESULT_TYPEDEF_(0x80040002L)// MessageId: OLE_E_ADVISENOTSUPPORTED
// MessageText:
// This implementation doesn't take advises
#define OLE_E_ADVISENOTSUPPORTED _HRESULT_TYPEDEF_(0x80040003L)上面这几个都是HRESULT的码。
OLE_E_???????????????????是定义的名字,
_HRESULT_TYPEDEF_(0x????????L)里括住的是16进制的代码。
MessageText下面写的是他们的描述