Michael Ellery wrote:
David Bertoni wrote:

I'm not sure. Are you certain the resource DLL is being built with ICU 3.2.1? You can verify this by looking at the build output. You should see a line like the following:


What is the resource DLL? Is that XalanMessages_1_10.dll? (or XalanMessages_1_10D.dll for debug).
Yes. The .dat file is produced by the build process, but is not required, because its contents are in the resource DLL.

Check your path to make sure it's not pointing to a newer version of the ICU. There's a glitch in the Makefiles where versions of the ICU binaries that are in the path will be used instead of the one specified by the ICUROOT environment variable.

If you do binary dump of the .dat file, you should see the correct resource name, which is "XalanMessages_1_10D_en_US.res." If you see something like "..\..\..\..\..\Build\Win32\VC7.1\Debug\Nls\Icu\XalanMessages_1_10D_en_US.res," then the resources were built with a newer version of the ICU.



You might also try to debug the code, to see if the ICU returns an error code, or if the resource bundle pointer is null.


I've debugged the code - line 134 of XalanICUMessageLoader.cpp is failing:

m_localeBundle = ures_open(sPackageName, szLocal , &err);

sPackageName is "XalanMessages_1_10D", szLocal is "en_US" and err comes back as U_MISSING_RESOURCE_ERROR.

Stepping into the ICU code, it looks to me like u_getDataDirectory is failing, I think because this line (1351 in putil.c):

path=getenv("ICU_DATA");

returns null.

So, are we required to set the ICU_DATA environment variable to get xalan to work with ICU? If so, how does this affect other applications that might be using ICU? Could we simply for xalan to pass the full path in sPackageName instead?
No, the ICU_DATA environment variable is not required.

Dave

Reply via email to