Понадобились мне функции SHCreateStreamOnFile*, а фигак - в Лазарусе и не объявлены.
Подглядел тут:
https://github.com/magicmonty/delphi-code-coverage/blob/master/3rdParty/JWAPI/jwapi2.2a/Win32API/JwaShLWAPI.pasПишу:
unit Unit2;
{$mode objfpc}{$H+}
interface
uses ActiveX, JwaWinType;
const
{$IFDEF UNICODE}
AWSuffix = 'W';
{$ELSE}
AWSuffix = 'A';
{$ENDIF UNICODE}
{$EXTERNALSYM SHCreateStreamOnFileA}
function SHCreateStreamOnFileA(pszFile: PAnsiChar; grfMode: DWORD; out ppstm: IStream): HResult; stdcall;
{$EXTERNALSYM SHCreateStreamOnFileW}
function SHCreateStreamOnFileW(pszFile: PWideChar; grfMode: DWORD; out ppstm: IStream): HResult; stdcall;
{$EXTERNALSYM SHCreateStreamOnFile}
function SHCreateStreamOnFile(pszFile: PTSTR; grfMode: DWORD; out ppstm: IStream): HResult; stdcall;
{$EXTERNALSYM SHCreateStreamOnFileEx}
function SHCreateStreamOnFileEx(pszFile: PWideChar; grfMode, dwAttributes: DWORD; fCreate: BOOL; pstmTemplate: IStream; out ppstm: IStream): HResult stdcall;
implementation
const // uses JwaWinDLLNames;
shlwapidll = 'shlwapi.dll';
function SHCreateStreamOnFileA; external shlwapidll name 'SHCreateStreamOnFileA';
function SHCreateStreamOnFileW; external shlwapidll name 'SHCreateStreamOnFileW';
function SHCreateStreamOnFile; external shlwapidll name 'SHCreateStreamOnFile'+AWSuffix;
function SHCreateStreamOnFileEx; external shlwapidll name 'SHCreateStreamOnFileEx';
end.
А он мне и говорит:
> unit2.pas(30,31) Fatal: Syntax error, ":" expected but ";" foundОн чего, хочет?:
function %NAME%{ >>> }: HResult{ <<< }; external %LIB% name '%NAME%';
Или вообще полностью? А с какого перепугу-то? Всегда же писалось без...
В Делфи точно всегда, в Лазарусе я относительно редко пишу, но точно помню и там тот же код у меня работал.