'Sounds like a nightmare. JNI can be a *very* wily beast to try taming.
ANYWAY - my original suggestion still stands:
you want to dump the binary value of "fname" after your "_tcslcpy()"
You need to see if "fname" is exactly 39 characters immediately after your "_tcslcpy()" (I'm reasonably sure it probably is).
You need to determine if "fname" is contiguous 8-bit bytes, or 16-bit wide characters. I'm not sure why you're using Unicode "L" constants, and I hope you don't think that changing the runtime locale (e.g. "$LANG") will at all affect a compile time constant (your string).
And once you completely understand what's happening at "_tcslcpy()", then you need to methodically trace the string from that point forward.
Good luck .. PSM
If you're using JNI, I'd strongly encourage you to use straight C: *not* C++.