Good afternoon! I have been trying to P/Invoke into libsmbclient on OSX 10.6 running 64 bit kernel. I compile the samba library myself (version 3.6.0) with -m32 and managed to get a simple stub working in C/C++:
static void auth_fn(const char *server, const char *share, char *workgroup, int wgmaxlen, char *username, int unmaxlen, char *password, int pwmaxlen) { } smbc_init(auth_fn, 10); smbc_opendir("smb://myuser:mypass@192.168.x.x/c$"); This works fine, then I created the P/Invokes: public static void SmbInit() { smbc_init(CallBackAuth, 0); } public static void CallBackAuth(IntPtr server, IntPtr share, IntPtr workgroup, int wgmaxlen, IntPtr username, int unmaxlen, IntPtr password, int pwmaxlen) { Console.WriteLine("MeeMa"); } public delegate void SmbCGetAuthDataFn(IntPtr server, IntPtr share, IntPtr workgroup, int wgmaxlen, IntPtr username, int unmaxlen, IntPtr password, int pwmaxlen); [DllImport("libsmbclient")] extern internal static int smbc_init(SmbCGetAuthDataFn callBackAuth, int debug); [DllImport("libsmbclient")] extern internal static int smbc_opendir([In, MarshalAs(UnmanagedType.LPStr)]string durl); Then simple calling into: SambaWrapper.SmbInit(); SambaWrapper.smbc_opendir(@"smb://username:password@somehostname/someshare"); Then I got this beautiful stacktrace here: http://paste.pocoo.org/show/517187/. I have made sure it's calling into the libsmbclient library I compiled and not the one that comes with OSX. I have also tried it against the one that comes with OSX but that one just blows up with a different trace. I was debugging this with Alan on IRC today and we thought it might be the delete being free'd but we tried adding a new smbc_init function into smb that looks like this: void myauth_fn(const char *server, const char *share, char *workgroup, int wgmaxlen, char *username, int unmaxlen, char *password, int pwmaxlen) { } int smbc_init2(int debug) { smbc_init(myauth_fn, debug); smbc_opendir("smb://user:pass@192.168.212.133/c$"); } And then tried to P/Invoke smbc_init2 only and P/Invoke: [DllImport("libsmbclient", CallingConvention = CallingConvention.Cdecl)] extern internal static int smbc_init2(int debug); When calling into smbc_init2() it blows up with exactly the same stacktrace. I tried again a C++ program that calls into smbc2_init() and it worked fine. Anyone here got any idea how to proceed further with this? Many thanks, Alfred _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list