From: SourceForge.net <no...@so...> - 2011-10-18 23:23:31
|
Bugs item #3425505, was opened at 2011-10-19 10:23 Message generated for change (Tracker Item Submitted) made by mybluedog You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=3425505&group_id=1645 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: csharp Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: mybluedog (mybluedog) Assigned to: William Fulton (wsfulton) Summary: C# Unicode Solution Initial Comment: C# is not handling Unicode strings properly on Windows. It's converting them to ANSI. By default, .net marshals strings as tchars. This is effectively ANSI chars on my Windows 7 machine (which is suprising). To correct this problem, there need to be two changes. Only one of them can be done with an .i file. The other requires a change to SWIG. Firstl, SWIGWStringHelper needs 'MarshalAs' directives as shown (an .i file can do this)... protected class SWIGWStringHelper { [return: MarshalAs(UnmanagedType.BStr)] public delegate string SWIGWStringDelegate(IntPtr message); static SWIGWStringDelegate wstringDelegate = new SWIGWStringDelegate(CreateWString); [DllImport("$dllimport", EntryPoint="SWIGRegisterWStringCallback_$module")] public static extern void SWIGRegisterWStringCallback_$module(SWIGWStringDelegate wstringDelegate); [return: MarshalAs(UnmanagedType.BStr)] static string CreateWString([MarshalAs(UnmanagedType.LPWStr)]IntPtr cString) { return System.Runtime.InteropServices.Marshal.PtrToStringUni(cString); } static SWIGWStringHelper() { SWIGRegisterWStringCallback_$module(wstringDelegate); } } static protected SWIGWStringHelper swigWStringHelper = new SWIGWStringHelper(); Secondly, in PINVOKE.cs, all string related DllImport directives need to have 'CharSet = CharSet.Unicode' appended to them as shown. [DllImport("xxx", EntryPoint="xxx", CharSet = CharSet.Unicode)] (This requires a change in SWIG itself as the DllImport cannot be manipulated through an .i file). ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=3425505&group_id=1645 |