Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Объявление SHCreateStreamOnFile* для Lazarus


Прохосый   (03.07.18 12:38

Понадобились мне функции 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 работало..?
Ну да ладно.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо