Я использую Visual Studio 2008 / .NET 3.5. Я использовал VS, чтобы сделать COM-компонент совместимым в .NET. Я добавил ссылку из приложения в COM DLL. COM DLL является сторонним объектом - частью SDK.
Для всех методов и событий все работает просто отлично - объекты / события COM представлены в виде объектов / событий первого класса.
Вот что происходит:
Метод Scan () запускается. В конце своего выполнения он вызывает событие.
void scanner_ImageBuffer(int lStructure)
{
}
Аргумент - lStructure - согласно документации:
ImageBuffer( int lStructure )
Описание: событие ImageBuffer
уведомит клиентское приложение о
завершение сканирования и передать
структура, содержащая ширину,
высота, размер и буфер изображения
изображение, которое было собрано как часть
сканирование. Это ответственность
клиентское приложение для освобождения
память, которая была выделена для
буфер изображения и освободить память
для структуры. Это событие не может
быть совместимым с Visual Basic
Приложения. Параметры:
int lStructure - это 32-битный указатель
в следующую структуру
struct _ImageBufferDef
{
int lWidth; // size of the image width in pixels
int lHeight; // size of the image height in pixels
int lSize; // size of the image in bytes
unsigned short* pusBuffer; // allocated memory containing image
}
Вот где я застрял: Как мне
реконструировать объект только с
INT
Я пробовал:
[StructLayout(LayoutKind.Sequential)]
struct ImageBufferDef
{
int lWidth;
int lHeight;
int lSize;
IntPtr pusBuffer;
}
void scanner_ImageBuffer( int lStructure )
{
IntPtr ptr = new IntPtr( lStructure );
ImageBufferDef buf = new ImageBufferDef();
try
{
Marshal.PtrToStructure( ptr, buf );
}
catch( Exception e )
{
Console.WriteLine( e.Message );
}
}