我正在尝试制作可能依赖Wacom平板电脑的应用程序。程序没有必要工作,但它是一个很好的补充。虽然,它也应该在没有安装Wintab32.dll的计算机上工作,我想检查DLL是否可用。
这段代码会产生错误,我希望在生成之前捕获错误。我使用WintabDN来支持.net Wacom应用程序。
if (WintabDN.CWintabInfo.IsWintabAvailable())
{
// Initialize Wintab
WintabLib.Initialize(true);
WintabLib.OnWintabPacketReceived += WintabLib_OnWintabPacketReceived;
}
FAILED IsWintabAvailable:System.DllNotFoundException:无法加载 DLL'Wintab32.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E) 在WintabDN.CWintabFuncs.WTInfoA(UInt32 wCategory_I,UInt32 nIndex_I,IntPtr IpOutput_O) 在WintabDN.CWintabInfo.IsWintabAvailable()
此错误的问题在于它是一个消息框,而不是包引发的异常。如何阻止此消息框显示?
答案 0 :(得分:2)
这有点棘手,因为已经在处理基础异常。
如果不是不可能的话,试图阻止消息框显示将很困难。你可以做一些非常hacky的东西,比如一个观察者线程来捕捉前景窗口的变化,然后手动发送一个鼠标点击消息到应用程序的底层消息队列,尝试触发上面的OK按钮消息框。
所以我有两个建议:this is the official topic on DLL search order;您可以使用它来模拟搜索并提前找到文件。
如果您不想这样做,可以从LoadLibrary
导入kernel32.dll
方法,然后调用它来尝试加载WintabDN库尝试使用的DLL;如果你得到一个例外,那么你知道WintabDN库也会。这是几乎与相关的主题,它将帮助绑定LoadLibrary:http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx
答案 1 :(得分:1)
尝试以下答案:
(如果没有在系统上安装Wintab,Wintab SDK示例将无法运行。如果系统上没有平板电脑(没有Wintab),如何使我的程序正常工作?)
答案 2 :(得分:0)
如何阻止此消息框显示?
你不能:
public static bool IsWintabAvailable()
{
IntPtr buf = IntPtr.Zero;
bool status = false;
try
{
status = (CWintabFuncs.WTInfoA(0, 0, buf) > 0);
}
catch (Exception ex)
{
MessageBox.Show("FAILED IsWintabAvailable: " + ex.ToString());
}
return status;
}
:D
我讨厌图书馆开发人员,编写这样的代码。他们不应该决定你会选择什么错误处理机制。
但它是开源的,你可以解决这个问题 或者您可以在他们的跟踪器上发布错误并等待他们修复它。