Какие значения возвратить для S_OK или E_FAIL из c# кода .NET?

Заменить drive.mount('/content/drive/') на drive.mount('/content/drive')

11
задан Rory 2 February 2010 в 15:04
поделиться

4 ответа

E_FAIL Шестнадцатеричный 80004005 в WinError.h

Вы видите полный файл WinError.h здесь. Вы не должны устанавливать C++ только для наблюдения значений.

ОБНОВЛЕНИЕ:

И неподписанные версии со знаком 0x80004005 являются всего двумя представлениями той же битовой маски. Если Вы добираетесь, ошибка кастинга затем используют отрицательное значение со знаком. Когда литой к ООН, подписываемой долго, это будет "корректное" значение. Протестируйте это сами в C#, он будет работать, например.

Этот код

    static void Main(string[] args)
    {
        UInt32 us = 0x80004005;
        Int32 s = (Int32)us;

        Console.WriteLine("Unsigned {0}", us);
        Console.WriteLine("Signed {0}", s);
        Console.WriteLine("Signed as unsigned {0}", (UInt32)s);

        Console.ReadKey();
    }

произведет этот вывод

  • Неподписанные 2147500037
  • Подписанный-2147467259
  • Подписанный как неподписанные 2147500037

Таким образом, безопасно использовать-2147467259 для значения E_FAIL

8
ответ дан 3 December 2019 в 05:14
поделиться

От WinError.h для Win32

#define E_FAIL _HRESULT_TYPEDEF_(0x80004005L)

Для нахождения ответов как это используйте поиск файла Visual Studio для поиска заголовочных файлов в каталоге VC Include каталога установки Visual Studio.

C:\Program Files\Microsoft Visual Studio 9.0\VC\include
7
ответ дан 3 December 2019 в 05:14
поделиться

Необходимо загрузить платформу SDK (ссылка)

Я перерыл код и нашел следующее в winerror.h

typedef long HRESULT;

#ifdef RC_INVOKED
#define _HRESULT_TYPEDEF_(_sc) _sc
#else // RC_INVOKED
#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
#endif // RC_INVOKED

#define E_FAIL _HRESULT_TYPEDEF_(0x80004005L)
#define S_OK  ((HRESULT)0x00000000L)

Необходимо возвратить E_FAIL вместо значения. Просто включайте winerror.h.

-1
ответ дан 3 December 2019 в 05:14
поделиться

Конструктор в Java фактически не «строит» объект, он используется для инициализации полей.

Представьте, что ваш абстрактный класс имеет поля x и y, и вы всегда хотите, чтобы они были инициализированы в определенном пути, независимо от того, какой конкретный подкласс в конечном итоге будет создан. Таким образом, создается конструктор и инициализируются эти поля.

Теперь, если у вас есть два разных подкласса абстрактного класса, при создании их экземпляров будут вызваны их конструкторы, а затем будет вызван родительский конструктор и инициализированы поля.

Если ничего не делать, будет вызван конструктор родительского объекта по умолчанию. Однако для вызова определенного конструктора родительского класса можно использовать ключевое слово super.

-121--997849-

Это зависит от характера сообщения.

  • Является ли он дуплексным (т.е. A разговаривает с B и B разговаривает с A)?
  • Является ли он коммуникацией данных или коммуникации завершения ?

и так далее.

Наиболее простой и целесообразной формой межпоточной связи является просто ожидание завершения других потоков. Это легче всего сделать с помощью Future :

ExecutorService exec = Executors.newFixedThreadPool(50);
final Future f = exec.submit(task1);
exec.submit(new Runnable() {
    @Override
    public void run() {
        f.get();
        // do stuff
    }
});

Вторая задача не будет выполнена до завершения первой.

Java 5 + имеет множество параллельных утилит для работы с этим видом вещей. Это может означать использование LinkedCharingQueue , CountDureLatch или многих других.

Для углубленного изучения параллелизма Java Concurrency in Practice является обязательным.

-121--1415194-

Я использовал это:

const int EFail = int.MinValue + 0x00004005;

для компромисса между читаемостью (если вы привыкли к шестнадцатеричным кодам) и ограничением C #.

1
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: