I think that the problem has to do with some changes that were made to Mono
regarding its handling of strings as return types from P/Invoke method.
Behind the scenes, a char* is being returned, and the runtime converts the
char* into a System.String. In addition, MS.NET calls CoTaskFree() on the
char*. At one time Mono did not do this, but for compatibility with MS.NET,
its behavior changed. Apparently, libcrypt does not want user to free the
pointer that crypt() returns.
The work-around for this is to have your method return an IntPtr and then
convert the IntPtr to a string manually. For example, use the following in
the place of your WriteLine() statement:
string encrypted = Marshal.PtrToStringAnsi(UnixCrypt(arg,arg));
Console.WriteLine("UnixEncrypting {0} : {1}",arg,encrypted);
> I am trying to use libcrypt.so.2.3.2 with c#. This code has been working
> for quite a while but stopped to work now.
>
> here is a little sample program I wrote
>
> <snip>
> using System;
> using System.Text;
> using System.Security.Cryptography;
> using System.Web.Security;
> using System.Runtime.InteropServices;
>
>
>
> namespace CryptTest
> {
> � � �class CryptTest
> � � � � �{
> � � � � �[DllImport ("crypt", EntryPoint="crypt", SetLastError=true)]
> � � � � �private static extern string UnixCrypt(string text, string salt);
>
> � � � � �[STAThread]
> � � � � �static void Main(string[] args)
> � � � � � � �{
> � � � � � � �Console.WriteLine("have {0} args",args.Length);
> � � � � � � �string arg = args[0];
> � � � � � � �Console.WriteLine("UnixEncrypting {0} :
> {1}",arg,UnixCrypt(arg,arg));
> � � � � �}
> � � �}
> }
> </snip>
>
> When I try to run this with
>
> mono encrypt.exe rainer
>
> I get a NullReference Exception. I am a bit lost here since this code has
> been working beautifully for months. Either my debian upgraded its
> libcrypt version (which could easily be true) or upgrading to mono-1.0.1
> introduced the problem (which is less likely since I remember having the
> same issue on mono-1.0).
_______________________________________________
Mono-list maillist - [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list