Фрагмент кода был написан когда-то под 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-файл обычным виндовым плэйером показывается без проблем). В чём моя ошибка?