我们有一个 WinForms 组件,我们的一位客户已在 Mono 中成功使用了好几个月。看来,该组件在当前使用的 Mono 版本中停止工作(运行时是 Mono 5,在 Ubuntu Linux 14 LTS 上运行)。
组件抛出异常,这里是对应栈顶:
$ mono bin/Debug/ALMAViewer.exe
SendMessage (48234666, 0xd2, (nil), (nil))
SendMessage (48234668, 0xd2, (nil), (nil))
System.EntryPointNotFoundException: LoadLibraryA
at (wrapper managed-to-native) ComponentNamespace.NativeMethods:LoadLibrary (string)
我不是 Mono 的高手,但如果我对这个日志的理解正确,Mono 无法加载定义如下的 WinAPI LoadLibrary 函数:
[DllImport("kernel32.dll", EntryPoint = "LoadLibraryA")]
public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);
有人告诉我为什么这段代码在 Mono 中停止工作以及如何解决这个问题吗?看起来这个平台不再支持 ANSI API 调用,我们只需要使用 Unicode 版本的 WinAPI 函数。