Новости:

Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.

Главное меню

Декларации для 64 бит

Автор Mike_B, 26.02.2021, 14:37:48

« назад - далее »

Mike_B

Добрый день.
Хитрые юзеры меняют формат даты (например, на полный в духе Пт 26.02.2021), а у меня рассчитано на ДД.ММ.ГГГГ. Даже не у меня, а календаря.
Сделал смену формата даты и возврат после. На 7-64 с офисом 32 бит работает. Декларации ниже.
Но вот вопрос - как будет на 64 ? Именно эти декларации менять надо или нет? Как понять и какими будут?
Что за тип lParam As Any у PostMessage?

#If VBA7 Then
   Public Declare PtrSafe Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
   Public Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
   Public Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" Alias "GetSystemDefaultLCID" () As Long
   Public Declare PtrSafe Function GetUserDefaultLCID Lib "kernel32" Alias "GetUserDefaultLCID" () As Long
   Public Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
#Else
   Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
   Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
   Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
   Public Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
   Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#End If


Почему вопрос - недавно такое видел:

#If Win64 Then
    #If VBA7 Then    ' Windows x64, Office 2010
        Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _
                 ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong
    #Else            ' Windows x64,Office 2003-2007
        Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                                           (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _
                                            ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong
    #End If
#Else
    #If VBA7 Then    ' Windows x86, Office 2010
        Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
                 ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    #Else            ' Windows x86, Office 2003-2007
        Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                                           (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
                                            ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    #End If
#End If

Дмитрий Щербаков(The_Prist)

Цитата: Mike_B от 26.02.2021, 14:37:48Сделал смену формата даты и возврат после
это где так жестко приходится извращаться, чтобы формат системной даты менять?
Цитата: Mike_B от 26.02.2021, 14:37:48как будет на 64
Смотря на чем этот 64-ый работает. Если офис ниже 2010 - то надо дополнительные блоки для этого писать(именно как на примере у Вас ниже).
Цитата: Mike_B от 26.02.2021, 14:37:48Что за тип lParam As Any
это вроде Variant в VBA - означает любой.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453

Mike_B

Цитата: Дмитрий Щербаков(The_Prist) от 26.02.2021, 14:47:07
это где так жестко приходится извращаться, чтобы формат системной даты менять?
Модуль календаря, найденный в инете. Авторства, увы, не знаю. Там по двойному клику выбирается дата и выполняется оператор TB = CStr(DateValue(dt_1)) И если дата не вида 26.02.2021, а Пт 26.02.2021 - имеем брык от DateValue.
Сам календарь, если надо, выложу.
ЦитироватьСмотря на чем этот 64-ый работает. Если офис ниже 2010 - то надо дополнительные блоки для этого писать(именно как на примере у Вас ниже).
Вот как тогда будут выглядеть описания? String сохраняется, Long меняем на LongLong? Но вот hwnd то Long, то LongPtr. И возврат у SetLocaleInfo то Boolean, то Long.
Вообще синее нагуглено в инете, красное - взято из Win32API_PtrSafe.TXT издания 2010 года.
Цитироватьэто вроде Variant в VBA - означает любой.
Variant знаю, Any - первый раз встретил.