Конференция "Corba" » CoInitializeSecurity в разных моделях [Delphi, Windows]
 
  • harisma © (06.10.09 13:21) [0]
    Почему если я задаю модель MULTITHREADED, при неверных параметрах, передаваемых в функцию CoInitializeSecurity возвращается некий код ошибки, а именно $80070057 (Imternal Com+ error), а если указана модель APARTMENTTHREADED, то эта функция крешет внутри себя и выдает ошибку Range check error?
    Я бы хотел и в модели APARTMENTTHREADED получить код ошибки, как и в MULTITHREADED. (там кстати могут быть еще 3 других кода ошибки). Кто может что подсказать?
  • clickmaker © (07.10.09 11:05) [1]
    > при неверных параметрах, передаваемых в функцию CoInitializeSecurity

    а откуда эти неверные параметры берутся?
  • harisma © (07.10.09 11:20) [2]

    > а откуда эти неверные параметры берутся?

    вводятся ручками. Дело в том, что эти параметры зачитываются из реестра, а там можно ошибочно что угодно указать. И даже более того, параметры то могут быть и в пределах допустимых значений, но на машине может быть заблокирован или отсутствовать тот или другой режим, например не поднят Керберос, а параметр установлен на него. Так вот в MULTITHREADED модели функция вернет некий HRESULT, который я могу обработать и выдать нормальное сообщение, а в APARTMENTTHREADED модели функция крешанет внутри себя и никакого HREsult не вернет, соответственно мне анализировать нечего.
  • clickmaker © (07.10.09 12:19) [3]
    > Range check error

    а это не дельфийское ли исключение?
  • harisma © (07.10.09 14:13) [4]
    Вообще то дельфийское, но почему тогда если я устанавливаю перед этим вызовом CoInitializeEx(nil, COINIT_MULTITHREADED) то получаю HRESULT = $80070057, а когда устанавливаю CoInitializeEx(nil, COINIT_APARTMENTTHREADED), то эта функция ничего не возвращает а вылетает по эксепшену Range check error?
  • clickmaker © (07.10.09 15:58) [5]
    ну фиг знает...
    приведи пример такого "кривого" вызова со значениями параметров
  • harisma © (07.10.09 18:04) [6]
    Дык элементарно:

    если так:
     CoInitializeEx(nil, COINIT_MULTITHREADED);
     Result := CoInitializeSecurity(nil, 1, nil, nil, 7, 5, nil, 0, nil);
     if Result <> S_OK then
       ...

    то сработает и выдаст Result = $80070057. (значений 7 и 5 в этих позициях быть не может)

    А если так:

     CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
     Result := CoInitializeSecurity(nil, 1, nil, nil, 7, 5, nil, 0, nil); - тут крешанет!!!
     if Result <> S_OK then
       ...
  • harisma © (12.10.09 13:24) [7]
    Так как? Ни у кого никаких соображений больше по этому поводу нет?
  • SPeller © (26.11.09 04:24) [8]
    А зачем ты передаешь cAuthSvc = 1 (Count of entries in asAuthSvc), при этом передавая nil в asAuthSvc???
 
Конференция "Corba" » CoInitializeSecurity в разных моделях [Delphi, Windows]
Есть новые Нет новых   [118666   +35][b:0][p:0]