function DoSomethingW(const AStr: PWideChar): Integer; stdcall;
var
S: WideString;
begin
S := AStr;
if (S <> '') and SomeCondition then
Result := Length(S) // положим, это и есть реальная работа
else
begin
SetLastError(ERROR_INVALID_PARAMETER);
Result := 0;
end;
end;
Объяснить, в чём косяк и как можно исправить.
Ответ - как обычно, примерно через месяц.
Ответ.
под 5 дельфи проблем нет
ОтветитьУдалитьПроблема есть в любой версии Delphi, просто вы её ещё не увидели. Смотрите внимательнее.
ОтветитьУдалитьХм, вроде на Королевстве видел что-то подобное. Не ERROR_INVALID_PARAMETER в LastError затирается случайно?
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьChipsman,
ОтветитьУдалить0_0 Офигеть, точь-в-точь, как пост GunSmoker'а на Королевстве. Может подсмотрели? :)
AStr может быть Unassigned - тогда ошибка.
ОтветитьУдалитьВалерий.
ну разве что логика and. даже если параметр был передан корректный, но условие SomeCondition не выполнилось, то попадаем в ветку ERROR_INVALID_PARAMETER
ОтветитьУдалитьНа мой взгляд, проблема в том, что здесь PWideChar отождествляется с WideChar, при том, что первый тип очевидно есть указатель на второй. Это значит, что не произведено необходимое приведение типов.
ОтветитьУдалить______________________________
Ошибаюсь?