我编写了一个与winspool 打印驱动程序交互的应用程序,几个月来它一直工作得很好。我需要将我的项目从 .NET Framework 3.5 移动到 4.0 以包含同事程序集,但这样做(并且仅这样做)会导致我的 .dll 导入方法调用之一在从 VS 2010 IDE 执行时失败。如果我在 Visual Studio 2010 环境之外运行调试和发布二进制文件,它们仍然可以工作。下面是迁移到 .NET 4.0 后失败的行:
// This call works just fine immediately before switching projects to .NET 4.0
// and begins failing immediately after.
WinSpool.ClosePrinter(m_PrinterHandle);
以下是我对此导入方法的定义:
public static class WinSpool
{
/// <summary>
/// http://msdn.microsoft.com/en-us/library/dd183446%28v=vs.85%29.aspx
/// </summary>
[DllImport(
"winspool.Drv",
EntryPoint = "ClosePrinter",
SetLastError = true,
ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern bool ClosePrinter(IntPtr hPrinter);
}
以下是我收到的异常的确切文本:
System.Runtime.InteropServices.SEHException(0x80004005):外部组件引发了异常
请记住,我可以恢复项目 .NET 3.5,并且在从 Visual Studio 2010 IDE 执行时工作正常。但是,使用 .NET 4.0 作为目标框架,从 IDE 运行时会出现异常,但直接从 Windows 资源管理器执行二进制文件时,它们工作正常。这里到底发生了什么。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)