views:

236

answers:

1

I got a strange compilation error when I followed the MSDN document to use CA2W to convert big5 strings to unicode strings in Visual Studio 2005.

This is the code I wrote:

#include <string>
#include <atldef.h>
#include <atlconv.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    string chineseInBig5 = "\xA4\xA4\xA4\xE5";
    ATL::CA2W(chineseInBig5.c_str());
    return 0;
}

The compilation error: error C3861: 'AtlThrowLastWin32': identifier not found

I don't know how this could happen. The document of AtlThrowLastWin32 shows that atldef.h is required, but I couldn't find the declaration of AtlThrowLastWin32 in atldef.h.

+1  A: 

I finally solved this problem by adding 2 include headers:

#include <atlbase.h> 
#include <atlstr.h>

I don't know why the MSDN document doesn't mention that.

MSDN (on the page you linked to) says: > Requirements> Header file: AtlBase.h, AtlConv.h (declared in AtlConv.h)
Logan Capaldo
Thanks to Logan Capaldo. I finally found why I was confused. The document of CA2AEX (http://msdn.microsoft.com/en-us/library/z0d7hetw(VS.80).aspx) only mentions "Requirements Header: atlconv.h"