powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить, поддерживает ли метод интерфейса константу?
5 сообщений из 5, страница 1 из 1
Как проверить, поддерживает ли метод интерфейса константу?
    #39957928
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую Delphi 2009. Импортировал интерфейс:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// *********************************************************************//
// Interface: ISpVoice
// Flags:     (512) Restricted
// GUID:      {6C44DF74-72B9-4992-A1EC-EF996E0422D4}
// *********************************************************************//
type
  ISpVoice = interface(ISpEventSource)
    ['{6C44DF74-72B9-4992-A1EC-EF996E0422D4}']
    function Speak(pwcs: PWideChar; dwFlags: LongWord; out pulStreamNumber: LongWord): HResult; stdcall;
  end;


Для параметра dwFlags используются константы:
Код: pascal
1.
2.
3.
4.
5.
6.
// Constants for enum SpeechVoiceSpeakFlags
type
  SpeechVoiceSpeakFlags = TOleEnum;
const
  SVSFDefault = $00000000;
  SVSFlagsAsync = $00000001;


В Windows 7 добавилась новая константа:
Код: pascal
1.
2.
const
  SVSFParseSapi = $00000080;


Хорошо, при старте программы я проверяю версию операционной системы, и если это Windows 7 и выше, то использую новую константу.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var SpeechFlags: SpeechVoiceSpeakFlags;

if IsWin7
   then SpeechFlags := SVSFlagsAsync OR SVSFParseSapi
   else SpeechFlags := SVSFlagsAsync;

SpVoice.Speak(pText, SpeechFlags);


Но оказалось, что поддержка этой константы может отсутствовать в Windows 7. Об этом сообщил китайский пользователь программы: возможно, у него какая-то "левая" китайская сборка Win7 SP1, но факт остается фактом - у всех пользователей Windows 7 константа SVSFParseSapi есть в системе, а у него нет.

Отсюда вопрос: как проверить, поддерживает ли метод интерфейса конкретное значение для параметра или нет?
...
Рейтинг: 0 / 0
Как проверить, поддерживает ли метод интерфейса константу?
    #39957937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crossaу всех пользователей Windows 7 константа SVSFParseSapi есть в системе, а у него нет.

"Констант" нет ни у кого. Они существую только на стадии компиляции.

crossaОб этом сообщил китайский пользователь программы
О чём конкретно он сообщил: метод возвращает ошибку или просто значение параметра
игнорируется?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как проверить, поддерживает ли метод интерфейса константу?
    #39957958
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

О чём конкретно он сообщил: метод возвращает ошибку или просто значение параметра игнорируется?

Метод возвращает ошибку: "The caller has specified invalid flags for this operation."
То есть, метод не поддерживает такое значение параметра.

Интерфейс хранится в системной библиотеке, так что, теоретически, можно при запуске программы находить эту библиотеку и проверять ее версию. Изначально в дистрибутиве Windows 7 присутствует нужная версия этой библиотеки, но данный пользователь, видимо, заменил ее на более старую по какой-то причине.

Не хотелось бы искать библиотеку на компьютере каждого пользователя и считывать свойства файла DLL (тем более, что файл может лежать и в папке "Windows", и в папке "Common Files", в зависимости от версии операционной системы). Неужели нет более простого способа проверить, поддерживает ли метод такое значение параметра или нет?
...
Рейтинг: 0 / 0
Как проверить, поддерживает ли метод интерфейса константу?
    #39957962
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crossaМетод возвращает ошибку

Вот тебе и простой способ проверить поддержку. Если, конечно, у этого класса нет метода
для выяснения поддерживаемых фич. Но это же документацию читать надо... Лень...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как проверить, поддерживает ли метод интерфейса константу?
    #39957972
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ISpVoice::Speak#Return Values

ValueDescriptionE_INVALIDARGOne or more parameters are invalid.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить, поддерживает ли метод интерфейса константу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]