P/invoke: В чем разница между FILETIME и long?
От: LWhisper  
Дата: 04.09.14 08:45
Оценка:
Привет.
Коротко о главном:
Есть структура WIN32_FIND_DATA: http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365740(v=vs.85).aspx
Она содержит в себе FILETIME: http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724284(v=vs.85).aspx

При реализации в C#, если использовать FILETIME, все нормально.
Если использовать long, отхватываются два лишних символа от имени.
В обоих случаях свойство Pack не установлено. CharSet = Unicode. Система x64.

Я бы предположил, что это проблема с выравниванием, и dwFileAttributes расширеяется до 8 байт, мы теряем 4 байта, что в пересчете на символы и дает -2 в имени файла.
Но почему это происходит при использовании long, но не происходит при использовании FILETIME? (http://msdn.microsoft.com/ru-ru/library/system.runtime.interopservices.comtypes.filetime(v=vs.110).aspx)

Спасибо за внимание.
Re: P/invoke: В чем разница между FILETIME и long?
От: Qodomoc Россия  
Дата: 04.09.14 09:24
Оценка: 17 (3)
Тот самый Джон Скит сталкивался с похожей проблемой.
Re: P/invoke: В чем разница между FILETIME и long?
От: icWasya  
Дата: 04.09.14 12:02
Оценка: 32 (4) +1
Здравствуйте, LWhisper, Вы писали:

LW>Привет.

LW>Коротко о главном:
LW>Есть структура WIN32_FIND_DATA: http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365740(v=vs.85).aspx
LW>Она содержит в себе FILETIME: http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724284(v=vs.85).aspx

LW>При реализации в C#, если использовать FILETIME, все нормально.

LW>Если использовать long, отхватываются два лишних символа от имени.
LW>В обоих случаях свойство Pack не установлено. CharSet = Unicode. Система x64.

LW>Я бы предположил, что это проблема с выравниванием, и dwFileAttributes расширеяется до 8 байт, мы теряем 4 байта, что в пересчете на символы и дает -2 в имени файла.

LW>Но почему это происходит при использовании long, но не происходит при использовании FILETIME? (http://msdn.microsoft.com/ru-ru/library/system.runtime.interopservices.comtypes.filetime(v=vs.110).aspx)

LW>Спасибо за внимание.


Здесь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.