ShellExecuteEx, компилятор не может понять что и куда

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
Tango
постоялец
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

ShellExecuteEx, компилятор не может понять что и куда

Сообщение Tango »

Функция ShellExecuteEx, при попытке использовать, компилятор не поймёт какую брать, пишет:
Can't determine which overloaded function to call

Код: Выделить всё

Function ShellExecuteExA(lpExecInfo: LPSHELLEXECUTEINFOA):Bool;external shell32 name 'ShellExecuteExA';
Function ShellExecuteExW(lpExecInfo: LPSHELLEXECUTEINFOW):Bool;external shell32 name 'ShellExecuteExW';
{$ifndef UNICODE}
Function ShellExecuteEx(lpExecInfo: LPSHELLEXECUTEINFOA):Bool;external shell32 name 'ShellExecuteExA';
{$else}
Function ShellExecuteEx(lpExecInfo: LPSHELLEXECUTEINFOW):Bool;external shell32 name 'ShellExecuteExW';
{$endif}


Даже с условной компиляцией. Если пишу явно ShellExecuteExA, всё нормально.

Win 8.1, Lazarus32 1.2.6 FPC 2.6.4.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Посмотрите внимательнее. У Вас в другом месте есть лишнее объявление.
Уберите

Код: Выделить всё

Function ShellExecuteExA(lpExecInfo: LPSHELLEXECUTEINFOA):Bool;external shell32 name 'ShellExecuteExA';
Function ShellExecuteExW(lpExecInfo: LPSHELLEXECUTEINFOW):Bool;external shell32 name 'ShellExecuteExW';
Аватара пользователя
Tango
постоялец
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Сообщение Tango »

Это не у меня, это модуль ShellApi.pp.
И где тут лишнее объявление?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Tango, да все там правильно... другое дело, что сам компилятор не понимает какую ветку выбрать.
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vapaamies »

Лекс Айрин писал(а):другое дело, что сам компилятор не понимает какую ветку выбрать.

В этом случае или режим {$T+} должен помочь, или ручное приведение типа. В коде как функция вызывается?
Аватара пользователя
Tango
постоялец
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Сообщение Tango »

Хромым костыли должны помочь или передвижение на коляске.

Всё это громоздко, всмотритесь в код, там как раз всё прозрачно, но компилятору всё равно даётся прозрачный намёк. Значит должно помочь подправление кода
ShellApi.pp.
Ответить