-
Помогите решить 2 проблемы с компилятором:
1. При использовании функции Shell_NotifyIcon(NIM_ADD, @IconData) происходит ошибка:"Can't determine which overloaded function to call". На delphi все проходит на ура с теми же параметрами...
2. При использовании IDE происходит ошибка линковки:
Error: could not create d:\turbid\program.exe Error: ld.exe:link.res: file format not recognized; treating as linker script Error: ld.exe:link.res:1: syntax error Эта ошибка не возникает при компилировании с командной строки.
-
1. На какую функцию ругается? 2. Надо посмотреть на опции IDE. Выставить те же, что прописаны в fpc.cfg, и все должно заработать
-
1.Именно на эту функцию. Если что, то IconData: TNotifyIconData; 2.Попробую.
-
По 1): похоже, что ошибка (или, скорее, несовместимость) не в компиляторе, а в модуле, где описана функция Shell_NotifyIcon. А именно, похоже, что с этим именем в модуле объявлена более, чем 1 функция (с разными наборами параметров). Соответственно, я бы попробовал явное приведение к типам (указание типов) параметров, передаваемых в нее. 2): надеюсь, что в исходниках нет чего-нибудь вроде {$R link.res}. Дело в том, что компилятор создает временный файл с названием link.res, в который помещает часть параметров для линкера. Формат его зависит от targe OS.
-
1. Если Вы имели ввиду сделать так:
var
IconData: TNotifyIconData;
Nim: Dword;
pIconData: Pointer;
...
Nim := NIM_ADD;
pIconData := @IconData;
Shell_NotifyIcon(Nim, pIconData);
то это не помогает. 2. Никаких параметров компилятора в исходном тексте нет, да и иначе они бы также влияли на компиляцию с командной строки. Игра в настройки никчему не привила, единственное что, так это изменение ошибки на "Error while linking" если убрать галочку с "Call linker after". Версия FPC 2.0.2, хотя как показывает практика, не от этого зависит :-)
-
1. Попробовал скомпилировать другой делфийский проект и получил эту же ошибку на функцию ExtractIcon. Обе функции получаются из модуля ShellApi. Кто-нить сталкивался с такими проблемами?
-
1. Зарабоало так:
type
LPNOTIFYICONDATA = ^NOTIFYICONDATA;
var
IconData: NOTIFYICONDATA;
...
Shell_NotifyIcon(NIM_ADD, LPNOTIFYICONDATA(@IconData));
2. Не линковался, потому что в имени папки стоял "!". В примере я приводи произвольную папку.
|