Конференция "FreePascal" » Объявление SHCreateStreamOnFile* для Lazarus
 
fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution sockets.php on line 83
fsockopen() [function.fsockopen]: unable to connect to www.delphimaster.ru:80 (php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution) sockets.php on line 83
php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (0) sockets.php on line 85
fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution sockets.php on line 83
fsockopen() [function.fsockopen]: unable to connect to www.delphimaster.ru:80 (php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution) sockets.php on line 83
php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (0) sockets.php on line 85
  • Прохосый (03.07.18 12:38) [0]
    Понадобились мне функции 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%';
    Или вообще полностью? А с какого перепугу-то? Всегда же писалось без...
    В Делфи точно всегда, в Лазарусе я относительно редко пишу, но точно помню и там тот же код у меня работал.
  • Rouse_ © (03.07.18 15:14) [1]
    Двоеточие поставь после HResult
    IStream): HResult stdcall;

  • Прохосый (03.07.18 18:14) [2]
    Так ругается-то на 30-ю строку, там где external. Ну поставил - без каких-либо изменений.

    Лазарус мне автоматически сгенерировал {$mode objfpc}, сейчас я методом тыка переписал на {$mode delphi} - и внезапно заработало.
    гм. Видимо по умолчанию Lazarus/FPC требует в implementation полностью заголовок дублировать. гм. А как же в JwaShLWAPI.pas работало..?
    Ну да ладно.
 
Конференция "FreePascal" » Объявление SHCreateStreamOnFile* для Lazarus
Есть новые Нет новых   [103732   +61][b:0.001][p:0.001]