我用vc++做了个捕获异常的程序,可为什么在dos窗口显示的信息不是英文而是汉字呢?如何把汉字改成英文呢?

解决方案 »

  1.   

    setlocale()方法好像是避免乱码用的。我是不想在dos中显示中文的异常信息,而是想显示英文的
      

  2.   

    我是这样写的,显示在dos窗口上的信息我想要英文的,不想要文字的,谢谢
    try {
                 .... } catch(_com_error e) {
        printf("EplsClientCompact.Main exception:%s",(char*)e.ErrorMessage());
             }
      

  3.   

    我用的是vc++ 6.0 mfc 是不是不应该用 _com_error 这个呀
      

  4.   


    在printf之前加两行
    #undef LANG_NEUTRAL
    #define LANG_NEUTRAL 0x09在printf之后加两行
    #undef LANG_NEUTRAL
    #define LANG_NEUTRAL 0x00
      

  5.   

    还是不好用呀。我是日文系统,出的msg是“EplsClientCompact.Main exception:エラーを特定できません”,代码我这么写的。#include "stdafx.h"
    #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
    }
      

  6.   

    日文系统
    试试这样。
    #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中的字串就是你要的东西了。
      

  7.   

    你可以把MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),中的LANG_NEUTRAL直接换成你要的语言码。比如英语是LANG_ENGLISH。前后的那4行#define和#undef就可以不要了。
      

  8.   

    英文出来了,不过怎么出个“EplsClientCompact.Main exception:Unspecified error”这个信息呢?不过我会先给你40分的。
      

  9.   

    我估计是因为你的COM运行系统是日文版的。所以得不到有关COM的英文描述。
    有两个办法。
    1:把程序部署到英文的系统中。
    2:手工建立一个HRESULT对错误描述的MAP。通过得到的HRESULT来查对应的描述。
      

  10.   

    你可以在winerror.h这个文件中找到HRESULT和对应的描述。
    不知道你用的VS是什么版的。如果是日文的是不是描述也是日文的?不清楚。
    不过这个文件在网上应该很容易找到。用MAP有一个好处。就是随时可以扩展新的HRESULT定义。
      

  11.   

    不好意思,刚才去吃饭了,我用的是英文版的vs,不过操作系统是日文的,也就是说,我的代码也只能这么写了,不能再通过代码来改变msg了?
      

  12.   

    恐怕不能了。
    你可以写一段程序把FormatMessage中的e.Error()换成其它的HRESULT值试试。
    如果其它的HRESULT也不行那就是这个问题了
      

  13.   

    兄弟,分都给你了,接到了吧,能不能给我一个看其他HRESULT值的代码,我不太会写,第一次作c的程序
      

  14.   

    // 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下面写的是他们的描述