Давайте начнем с диапазона BigInt
: от -2 ^ 63 (-9,223,372,036,854,775,808) до 2 ^ 63-1 (9,223,372,036,854,775,807). Это примерно ± 9E + 18, поэтому -4,66606E + 22 маловероятно BigInt
.
Перейдем к сравнению значений различных типов данных:
declare @Foo as BigInt = 8765432109876543210;
declare @FloatFoo as Float(24) = @Foo, @DoubleFoo as Float(53) = @Foo;
-- According to the rules for data type preedence a BigInt value will be converted to a Float
-- when the two data types are compared. Hence all of the values are "equal".
select @Foo as Foo,
@FloatFoo as FloatFoo, case when @Foo = @FloatFoo then 1 else 0 end as FloatMatch,
@DoubleFoo as DoubleFoo, case when @Foo = @DoubleFoo then 1 else 0 end as DoubleMatch;
-- Since a Float(53) has a precision of 15 digits that means some precision will be lost.
set @Foo += 1; -- Bump the BigInt value, but leave the Floats unchanged.
-- And ... the values are all still "equal"!
select @Foo as Foo,
@FloatFoo as FloatFoo, case when @Foo = @FloatFoo then 1 else 0 end as FloatMatch,
@DoubleFoo as DoubleFoo, case when @Foo = @DoubleFoo then 1 else 0 end as DoubleMatch;
-- Once more, with feeling.
set @Foo += 1000; -- A bigger bump makes the Float(53) value different, but not the Float(24).
select @Foo as Foo,
@FloatFoo as FloatFoo, case when @Foo = @FloatFoo then 1 else 0 end as FloatMatch,
@DoubleFoo as DoubleFoo, case when @Foo = @DoubleFoo then 1 else 0 end as DoubleMatch;
Ссылки: Приоритет типа данных , Float
.
Резюме: «Имеются неверные данные со значением bigint
. Значение - -4.66606E+22
». Это действительно плохие данные. А сравнение значений BigInt
и Float
является неточной деятельностью, которая может привести к разочарованию.
Этот поток обеспечивает интересную информацию о данных, содержавшихся в .lnk файле
Функция sSHGetFileInfoss должна смочь извлечь файл значка.
Зарегистрированный здесь и используемый для lnk файла:
Path2Link := 'C:\Stuff\TBear S Saver.lnk';
SHGetFileInfo(PChar(Path2Link), 0, ShInfo1, SizeOf(TSHFILEINFO),
SHGFI_ICON);
// this ShInfo1.hIcon will have the Icon Handle for the Link Icon with
// the small ShortCut arrow added}
Из первой ссылки Вы могли создать такую утилиту в c#, где Вы объявите эту функцию как:
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(
string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi,
uint cbSizeFileInfo, uint uFlags);
Вы могли, также создал утилиту на autoit языке сценария, где Вы будете использовать ту функцию, объявленную как это:
Func _ShellGetAssocIcon(Const $szFile,Const $IconFlags = 0)
Local $tFileInfo = DllStructCreate($tagSHFILEINFO)
If @error Then
Return SetError(1,@extended,0)
EndIf
Local $Ret = DllCall("shell32.dll","int","SHGetFileInfo","str",$szFile,"dword",0, _
"ptr",DllStructGetPtr($tFileInfo),"uint",DllStructGetSize($tFileInfo),"uint",BitOr($SHGFI_ICON,$IconFlags))
MsgBox(0,0,@error)
Return DllStructGetData($tFileInfo,"hIcon")
EndFunc
Можно также проанализировать .lnk файл сами, видеть этот PDF или эту статью о деталях формата файла ярлыка.
Или можно использовать класс ShellLink, упомянутый в ответе на этот вопрос.
Чтобы добавить к этому еще несколько ресурсов, потому что, вероятно, у вас нет значка приложения, а не значка с ярлыком в левом нижнем углу: