Я использую DLL, который извлекает изображение из сканера и возвращает его мне как intptr , который представляет собой ручку. Я пытался создать FileStream , используя необработанное указатель и сначала обернув его в SafeFileHandle , но в обоих случаях я получаю ошибку: System.io.ioException: Руководство недействительна. Как я могу прочитать данные из этой ручки? Все, что я хочу сделать, это написать байты в файл на диске. Возвращенный DIB - это разблокированный тип ручки, и пользовательское приложение должно нести ответственность за обработку DIB, вызывая функцию API Windows Globallock (), а затем в конечном итоге освободив память, вызывая функции Windows API GlobalUnlock () и GlobalFree ().
это то, что я все еще есть, чтобы использовать, даже если мы все еще есть, что -то, что я могу использовать. FileStream ? Если да, то как?static void Main(string[] args)
{
// Initialize DTWAIN
var TwainHandle = TwainAPI.DTWAIN_SysInitialize();
if (TwainHandle == IntPtr.Zero)
Console.WriteLine("TWAIN Failed to be initialized. Exiting...");
else
{
// Select a TWAIN Source from the TWAIN Dialog
var SelectedSource = TwainAPI.DTWAIN_SelectSource();
if (SelectedSource != IntPtr.Zero)
{
Console.WriteLine("Selected source");
// Display the product name of the Source
StringBuilder szInfo = new StringBuilder(256);
TwainAPI.DTWAIN_GetSourceProductNameA(SelectedSource, szInfo, 256);
Console.WriteLine("The source product name is " + szInfo.ToString());
// Start scanning
int status = -1;
var images = TwainAPI.DTWAIN_AcquireNative(SelectedSource, TwainAPI.DTWAIN_PT_DEFAULT, 1, 1, 1, ref status);
Console.WriteLine($"Return status: {status}"); // 1000 is success
// Get image handle
var dibHandle = TwainAPI.DTWAIN_GetAcquiredImage(images, 0, 0);
Console.WriteLine($"Handle: {dibHandle} - {dibHandle.ToInt64():X}");
var safeHandle = new SafeFileHandle(dibHandle, true);
if (safeHandle.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
}
Console.WriteLine($"Invalid: {safeHandle.IsInvalid}, Closed: {safeHandle.IsClosed}");
// Save image
using (var sourceStream = new FileStream(safeHandle, FileAccess.Read))
{
using (var destinationStream = File.OpenWrite(@"C:\Users\ckeller\Downloads\testImage.bmp"))
{
sourceStream.CopyTo(destinationStream);
}
}
}
Console.WriteLine("Complete");
TwainAPI.DTWAIN_SysDestroy();
}
}
< /code>
Selected source
The source product name is KODAK Scanner: i5000
Return status: 1000
Handle: 89196236 - 55106CC
Invalid: False, Closed: False
Unhandled Exception: System.IO.IOException: The handle is invalid.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.VerifyHandleIsSync()
at System.IO.FileStream..ctor(SafeFileHandle handle, FileAccess access, Int32 bufferSize, Boolean isAsync)
at System.IO.FileStream..ctor(SafeFileHandle handle, FileAccess access)
at DTwain_Test.Program.Main(String[] args) in C:\Users\ckeller\Downloads\DTwain Test\DTwain Test\Program.cs:line 95
< /code>
The library I'm using on GitHub: https://github.com/dynarithmic/twain_library
Подробнее здесь: https://stackoverflow.com/questions/797 ... dle-dtwain
Как создать FileStream из необработанной ручки Intptr? (Dtwain) ⇐ C#
Место общения программистов C#
-
Anonymous
1759032875
Anonymous
Я использую DLL, который извлекает изображение из сканера и возвращает его мне как intptr , который представляет собой ручку. Я пытался создать FileStream , используя необработанное указатель и сначала обернув его в SafeFileHandle , но в обоих случаях я получаю ошибку: System.io.ioException: Руководство недействительна. Как я могу прочитать данные из этой ручки? Все, что я хочу сделать, это написать байты в файл на диске. Возвращенный DIB - это разблокированный тип ручки, и пользовательское приложение должно нести ответственность за обработку DIB, вызывая функцию API Windows Globallock (), а затем в конечном итоге освободив память, вызывая функции Windows API GlobalUnlock () и GlobalFree ().
это то, что я все еще есть, чтобы использовать, даже если мы все еще есть, что -то, что я могу использовать. FileStream ? Если да, то как?static void Main(string[] args)
{
// Initialize DTWAIN
var TwainHandle = TwainAPI.DTWAIN_SysInitialize();
if (TwainHandle == IntPtr.Zero)
Console.WriteLine("TWAIN Failed to be initialized. Exiting...");
else
{
// Select a TWAIN Source from the TWAIN Dialog
var SelectedSource = TwainAPI.DTWAIN_SelectSource();
if (SelectedSource != IntPtr.Zero)
{
Console.WriteLine("Selected source");
// Display the product name of the Source
StringBuilder szInfo = new StringBuilder(256);
TwainAPI.DTWAIN_GetSourceProductNameA(SelectedSource, szInfo, 256);
Console.WriteLine("The source product name is " + szInfo.ToString());
// Start scanning
int status = -1;
var images = TwainAPI.DTWAIN_AcquireNative(SelectedSource, TwainAPI.DTWAIN_PT_DEFAULT, 1, 1, 1, ref status);
Console.WriteLine($"Return status: {status}"); // 1000 is success
// Get image handle
var dibHandle = TwainAPI.DTWAIN_GetAcquiredImage(images, 0, 0);
Console.WriteLine($"Handle: {dibHandle} - {dibHandle.ToInt64():X}");
var safeHandle = new SafeFileHandle(dibHandle, true);
if (safeHandle.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
}
Console.WriteLine($"Invalid: {safeHandle.IsInvalid}, Closed: {safeHandle.IsClosed}");
// Save image
using (var sourceStream = new FileStream(safeHandle, FileAccess.Read))
{
using (var destinationStream = File.OpenWrite(@"C:\Users\ckeller\Downloads\testImage.bmp"))
{
sourceStream.CopyTo(destinationStream);
}
}
}
Console.WriteLine("Complete");
TwainAPI.DTWAIN_SysDestroy();
}
}
< /code>
Selected source
The source product name is KODAK Scanner: i5000
Return status: 1000
Handle: 89196236 - 55106CC
Invalid: False, Closed: False
Unhandled Exception: System.IO.IOException: The handle is invalid.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.VerifyHandleIsSync()
at System.IO.FileStream..ctor(SafeFileHandle handle, FileAccess access, Int32 bufferSize, Boolean isAsync)
at System.IO.FileStream..ctor(SafeFileHandle handle, FileAccess access)
at DTwain_Test.Program.Main(String[] args) in C:\Users\ckeller\Downloads\DTwain Test\DTwain Test\Program.cs:line 95
< /code>
The library I'm using on GitHub: https://github.com/dynarithmic/twain_library
Подробнее здесь: [url]https://stackoverflow.com/questions/79740317/how-do-i-create-a-filestream-from-a-raw-intptr-handle-dtwain[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия