Эффективный способ передать Bitmap в зарегистрированный компонент COM - PullRequest
0 голосов
/ 24 мая 2019

Я зарегистрировал класс COM и интерфейс, написанный на .NET 2.0.Теперь я ищу способ передать объект Bitmap из приложения WindowsForms .Net 4.5 в компонент COM.

Когда я пытаюсь сделать этот код:

 Type type = Type.GetTypeFromCLSID(clsid);
 source = (IBaseFilter) Activator.CreateInstance(type);
        public void SetBitmap(Bitmap input)
        {
 IImageSourceFilter advSource = (IImageSourceFilter)source;
 advSource.SetBitmapObj(input);
        }

Я получаю следующее исключение

    System.InvalidCastException
  HResult=0x80004002
  Message=Unable to cast COM object of type 'System.__ComObject' to class type 'System.Drawing.Bitmap'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.
  Source=DShow
  StackTrace:
   at RTSPTestAPP.Camera.BMPtoCam.IImageSourceFilter.SetBitmapObj(Object inp)
   at RTSPTestAPP.Camera.BMPtoCam.SetBitmap(Bitmap input) in C:\Users\...\BMPtoCam.cs:line 43

Передача его в виде байтового массива неэффективна и находит много ресурсов ЦП (и я посылаю много битовых карт из декодированного видеопотока).

1 Ответ

0 голосов
/ 27 мая 2019

Найден способ: я просто разрабатываю COM-компонент с той же .net, что и программа, которая будет его использовать. Тогда на Type type = Type.GetTypeFromCLSID(clsid); я получу не необработанный тип (System .__ ComObject), вместо этого я получу правильный интерфейс с правильными методами. И я просто передаю растровое изображение в качестве аргумента. Также важно добавить ссылку на эту сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...