Я написал приложение, которое взаимодействует с драйвером печати winspool, и оно прекрасно работало в течение нескольких месяцев.Мне нужно переместить мои проекты с .NET Framework 3.5 на 4.0, чтобы включить сборки коллег, но при этом (и только при этом) происходит сбой одного из моих вызовов импортированного метода .dll при выполнении из IDE VS 2010.Двоичные файлы отладки и выпуска по-прежнему работают, если я запускаю их вне среды 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);
}
Ниже приведен точный текст исключения Iполучаю:
System.Runtime.InteropServices.SEHException (0x80004005): Внешний компонент выдал исключение
Имейте в виду, яМожно восстановить проект .NET 3.5, и он прекрасно работает при выполнении из среды разработки Visual Studio 2010.Но с .NET 4.0 в качестве целевой платформы я получаю исключение при запуске из IDE, но при выполнении двоичных файлов непосредственно из проводника Windows они работают нормально.Какого черта здесь происходит.