我们有一个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函数。