Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 23.04.2017, 12:19   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 483
Репутация: 101
По умолчанию Несколько SampleGrabber callback в одном процессе

Здравствуйте.
Написал вот такой класс : https://pastebin.com/8bDruPkh
Юзать так:
Код:

unit Unit_MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, Winapi.ActiveX, Winapi.DirectShow9, Unit_VideoPlayerTest;

function init1:boolean;

const
myclass = 'MyPikrogs';
mytitle = 'Nj4ame';

var
  wc : TWndClassEx;
  form1 : HWND;
  VidPlayers : array of TVideoPlayer;
  Player : TVideoPlayer;

implementation

function AddPlayer(x,y : Integer; prt, MainWnd : HWND) : TVideoPlayer;
var
  n : Integer;
begin
  n := Length(VidPlayers);
  SetLength(VidPlayers,n+1);
  VidPlayers[n] := TVideoPlayer.Create(x,y,prt,MainWnd);
  Result := VidPlayers[n];
end;

function WindowProc1(wnd:HWND; Msg : uint; Wpar:Wparam; Lpar:LPARAM):Lresult; stdcall;
var
  i : Integer;
  ps : TPaintStruct;
Begin
  Result := 0;
  case msg of

    WM_PAINT:
    begin
      BeginPaint(wnd,ps);
      if Length(VidPlayers)>0 then
      for I := 0 to Length(VidPlayers)-1 do
//      begin
        VidPlayers[i].Redraw;
//      end;
      EndPaint(wnd,ps);
    end;

    WM_KEYDOWN:
    begin
      SendMessage(wnd, WM_DESTROY,0,0);
    end;

    WM_CREATE:
    begin
      CoInitialize(nil);
	  {создаём экземпляр}
      player := AddPlayer(0,0,wnd,wnd);
      Player.UseCallback := True; //включаем SampleGrabber callback
      player.fileName := 'video1.mp4';
      player.Play;

	  {создаём еще экземпляр}
      player := AddPlayer(310,0,wnd,wnd);
      Player.UseCallback := True; //и тоже включаем SampleGrabber callback
      player.fileName := 'video2.mp4';
      player.Play;
    end;

    WM_DESTROY:
    Begin
      if Length(VidPlayers)>0 then
      for I := 0 to Length(VidPlayers)-1 do
      VidPlayers[i].Free; //убиваем все экземпляры в массиве
      CoUninitialize;
      unregisterclass(myclass,hinstance);
      postquitmessage(0);
      Result:=0;
      exit;
    End;

    WM_QUERYENDSESSION:
    result := integer(true);
	
    WM_ENDSESSION:
    if wpar=integer(true) then
      sendmessage(wnd,wm_destroy,0,0);

   else Result:=DefWindowProc(wnd,msg,wpar,lpar);
  end;
End;

Если включить callback у обоих экземпляров, то программа вылетит с ошибкой (иногда сразу, иногда через несколько секунд):

а дебаггер встанет здесь: http://i90.fastpic.ru/big/2017/0423/...3c48ac064f.jpg
Почему так происходит? Ошибка в моем коде или вообще так делать нельзя?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 26.06.2017, 13:09   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 483
Репутация: 101
По умолчанию

up _
BLACK_RAIN вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько COUNT() в одном запросе Tahoma SQL, базы данных 2 27.01.2017 20:33
PageControl. в процессе проектировки формы создать несколько вкладок. GN_ Помощь студентам 7 15.11.2011 20:56
несколько языков в одном приложении nactuxa Помощь студентам 1 03.02.2011 01:11
Несколько запросов в одном ADOQuery1 XKsandrX Общие вопросы Delphi 3 31.05.2010 14:28
Несколько файлов в одном архиве boostman Общие вопросы Delphi 1 06.12.2009 12:22




14:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru