Конференция "WinAPI" » Delphi XE: не открыть AVI-файл командой mciSendCommand
 
  • Prok186 © (14.11.11 19:29) [0]
    Фрагмент кода был написан когда-то под Delphi7. Используется для просмотра созданных самой же программой AVI-шек. При переходе на Delphi XE (точнее, XE2, но компиляция под Win32) перестали даже открываться AVI-файлы. Понимая, что теперь это UniCode-строки, переделал PChar-->PAnsiChar:

    type Tmci_dgv_Open_Parms = record
     dwCallback: LongInt;
     wDeviceID: Word;
     wReserved0: Word;
     lpstrDeviceType: PAnsiChar;
     lpstrElementName: PAnsiChar;
     lpstrAlias: PAnsiChar;
     dwStyle: LongInt;
     hWndParent: Hwnd;
     wReserved1: Word;
    end;
    {-----------------------------------------------------------------}
    function OpenAVI(const Window: HWnd;
     const FileName: TFileName): LongInt;
    var mciOpen: Tmci_dgv_Open_Parms;    mciStatus: Tmci_Status_Parms;
    begin
    mciOpen.lpstrDeviceType := PAnsiChar(AnsiString('AviVideo'));
    mciOpen.lpstrElementName := PAnsiChar(AnsiString(FileName));
    mciOpen.dwStyle := ws_Child;
    mciOpen.hWndParent := OwnerWindow;
    ErrNo := mciSendCommand(0, mci_Open,  mci_Anim_Open_Parent or
     mci_Open_Element or mci_Anim_Open_ws, LongInt(@mciOpen));
    ShowMessage('Err=' + IntToStr(ErrNo));
    ........
    end;


    В других случаях переход параметров, передаваемых в стандартные DLL на PAnsiChar - помогал, но теперь - нет... Выдаётся ошибка 281: "Не могу определить тип устройства по расширению файла" (AVI-файл обычным виндовым плэйером показывается без проблем). В чём моя ошибка?
  • Сергей М. © (14.11.11 20:55) [1]

    > В чём моя ошибка?


    Наверно в том что по факту вызывается mciSendCommandW, в то время как параметром ей ты передаешь структуру, содержащую ссылки на Ansi-строки.
  • Prok186 © (15.11.11 16:20) [2]
    Спасибо! Нормально пошло при следующем описании структуры:

    type Tmci_dgv_Open_Parms = record
     dwCallback: DWord_Ptr;
     wDeviceID: Word;
     wReserved0: Word;
     lpstrDeviceType: PWideChar;
     lpstrElementName: PWideChar;
     lpstrAlias: PWideChar;
     dwStyle: DWord;
     hWndParent: Hwnd;
     wReserved1: Word;
    end;


    ...ну и в самом программе заменил PAnsiChar на PWideChar, AnsiString на WideString
 
Конференция "WinAPI" » Delphi XE: не открыть AVI-файл командой mciSendCommand
Есть новые Нет новых   [134430   +2][b:0][p:0.001]