Trabalhando com HResult, interoperabilidade e coisas relacionadas em C #
Pergunta
Eu estou trabalhando em um projeto em C # para criar um aplicativo de formulários. Eu gostaria de usar IFileDialog e outras funcionalidades que faz parte da API nativa do Windows (ou no entanto ti deve ser chamado).
Começando eu não sabia absolutamente nada sobre interoperabilidade ou a API do Windows. Estou começando a aprender, mas às vezes pode ser difícil de encontrar informações muito básicas sobre certos aspectos. Portanto, tenho uma série de perguntas (provavelmente triviais / estúpidas):
HRESULTS são usados ??frequentemente. Pelo que entendi, HRESULTS são nada mais do que uma entidade de 32 bits onde os diferentes pedaços fornecer informações sobre o resultado de certas operações. Em algum código que eu encontrei on-line muitas vezes eu vejo coisas como int hres = -2147467259;
. Sendo um total de noob fui verificar o que isso significa. -2147467259
é 0xFFFFFFFF80004005
e na documentação on-line em MSDN eu posso ver que significa 0x80004005
E_FAIL
erro aka não especificado. A minha pergunta é, o que é com a parte FFFFFFFF
? Não foi possível apenas têm int hres = 0x80004005
usado? Talvez isso é muito óbvio e eu sou um noob total, mas ainda:)
Solução
A parte FFFFFFFF é porque seu HResult é negativo.
Isso é como computadores armazenam números negativos usando complemento de dois .
Confira este cálculo (grifo meu):
-2147467259 = 0xFFFFFFFF 80004005
-2147467259 + 2 ^ 32 (capotamento) = 2147500037 = 0x
Outras dicas
em 32 plataformas bit um int
é de 32 bits de comprimento, que é de 4 bytes de 8 dígitos hexadecimais. Então E_FAIL
seria 0x80004005
, (que é o que o código colado shows. Se você despejar esse valor em uma máquina de 64 bits, em seguida, ele vai levar até o dobro de armazenamento e uma vez que os números são sinal estendido ea principal 8 (100
binário) meios o bit de sinal é 1
então é mais todo o caminho. 1111
em binário é F
em hexadecimal que traz todas as F
s que você vê.