<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Trouble with utf-16 marshaling</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3059" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>&nbsp;&nbsp; Furthermore, I see in the mono source code 
that there is a test function in the 
mono/mono/tests/libtest.c</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>STDCALL unsigned short*</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>test_lpwstr_marshal (unsigned short* chars, long 
length)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>{</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>...</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>}</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=090580718-29062007><FONT face=Arial 
color=#0000ff size=2>&nbsp;&nbsp; Which is basically the same thing I'm doing; 
further indicating that this should work.</FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> mono-list-bounces@lists.ximian.com 
[mailto:mono-list-bounces@lists.ximian.com] <B>On Behalf Of </B>Maser, 
Dan<BR><B>Sent:</B> Friday, June 29, 2007 9:13 AM<BR><B>To:</B> 
mono-list@lists.ximian.com<BR><B>Subject:</B> [Mono-list] Trouble with utf-16 
marshaling<BR></FONT><BR></DIV>
<DIV></DIV><!-- Converted from text/rtf format --><BR>
<P><FONT face=Arial size=2>&nbsp;&nbsp; My situation is this:&nbsp; I've got a C 
library that has a lot of UTF-16 inputs and outputs.&nbsp; The C type is always 
"unsigned short*" or "const unsigned short*" (because clearly wchar_t* isn't 
portable because it's 4 bytes on linux).&nbsp;&nbsp; All of my C# code has the 
"[MarshalAs(UnsignedType.LPWStr)]" attribute specified.</FONT></P>
<P><FONT face=Arial size=2>&nbsp;&nbsp; It works properly in windows with MS 
.NET, but doesn't work for me in linux with mono.&nbsp;&nbsp; I've verified in 
gdb that the C library is returning the correct string, but immediately after 
the C dll returns and mono does the LPWStr marshaling the string is total 
garbage characters.&nbsp;&nbsp; I am under the impression from previous posts 
that 2-byte UTF-16 should marshal properly to mono with the LPWStr 
attribute.&nbsp; In fact it looks like some of the gdiplus calls use that same 
thing and work&#8230; any ideas what I can check on because mine doesn't?</FONT></P>
<P><FONT face=Arial size=2>&nbsp;&nbsp; For more clarification my C library has 
a function signature like this:</FONT> </P>
<P><FONT face=Arial size=2>void my_function(unsigned short* myArg);</FONT> </P>
<P><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; And my C# code looks like 
this:</FONT> </P><BR>
<P><FONT face=Arial size=2>[DllImport("myCLib")]</FONT> <BR><FONT face=Arial 
size=2>public static extern void my_function([MarshalAs(UnmanagedType.LPWStr)] 
string myArg);</FONT> </P>
<P><FONT face=Arial size=2>&nbsp;&nbsp; Thanks in advance for any ideas on what 
to check!</FONT> <BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dan 
Maser</FONT> </P></BODY></HTML>