Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Переход с Access 32 на Access 64. Есть проблемы.  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4684
Подсунули Access 2013 64 разрядный. И заставляют переводить на него программы. И чтоб была совместимость 32-х битным.
Вот попробовал пример
Option Compare Database
Option Explicit

Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As LongPtr
'---------------------------------------------------------------------------------------
' Procedure : fnSetWindow
' DateTime  : 20.12.2007 03:07
' Author    : Администратор
' Purpose   : функция управления видимостью и размерами окна
'---------------------------------------------------------------------------------------
'
Public Function fnSetWindow(nHwnd As LongPtr, nCmdShow As LongPtr) As Long

On Error GoTo Err_fnSetWindow

fnSetWindow = ShowWindow(nHwnd, nCmdShow)

Exit_fnSetWindow:

Exit Function

Err_fnSetWindow:
   MsgBox Err.Description
   Resume Exit_fnSetWindow
End Function

Public Sub Test_1()
' разворачивание окна Access во весь экрае
    fnSetWindow Application.hWndAccessApp, 3 'SW_SHOWMAXIMIZED
End Sub

Public Sub Test_2()
' разворачивание окна Access в оконный режим
    fnSetWindow Application.hWndAccessApp, 9
End Sub

Запускать Test_1 или Test_2. В функции fnSetWindow выдаёт ошибку на вызове ShowWindow. Пишет, что тип переменной не определён. Что делать? Где ошибка?

------------------------------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
17 дек 14, 15:04    [17011039]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3938
Joss, если я правильно понял проблему, то
#If VBA7  And Win64 Then
Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As LongPtr
#Else
Public  Declare Function ShowWindow  Lib "user32" _
            (ByVal hWnd As Long, _
            ByVal nCmdShow As Long) As Long
#End If

#If VBA7  And Win64 Then
Public Function fnSetWindow(nHwnd As LongPtr, nCmdShow As LongPtr) As LongLong'(?) не помню, уточнить...
#Else
Public Function fnSetWindow(nHwnd As Long, nCmdShow As Long) As Long
#End If
On Error GoTo Err_fnSetWindow

fnSetWindow = ShowWindow(nHwnd, nCmdShow)

Exit_fnSetWindow:
End Function
...

И далее 16939507...

ИМХО
17 дек 14, 16:55    [17011898]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4684
Сам задал вопрос, сам ответил. Неправильно задекларирована функция
У меня
Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As LongPtr
а надо
Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As Long

Отсюда возникает вопрос: Когда надо ставить LongPtr, когда Long, а когда LongLong ? Я про декларирование, если что...
17 дек 14, 17:10    [17012008]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4684
to Панург

C этим декларированием тот ещё геморой. Вот описание пользовательского типа в Access 2003 (32 бит)
Public Type OpenFilename
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        iFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        Flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
End Type
а как это будет выглядеть в VBA 7 в 64-х битной? Так?
Public Type OpenFilename
        lStructSize As LongPtr
        hwndOwner As LongPtr
        hInstance As LongPtr
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As LongPtr
        iFilterIndex As LongPtr
        lpstrFile As String
        nMaxFile As LongPtr
        lpstrFileTitle As String
        nMaxFileTitle As LongPtr
        lpstrInitialDir As String
        lpstrTitle As String
        Flags As LongPtr
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As LongPtr
        lpfnHook As LongPtr
        lpTemplateName As String
End Type
Или нет?
17 дек 14, 17:18    [17012091]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3938
Joss, я давненько разбирался с этим вопросом, но уже подзабыл (увы мне). Вот посмотри ссылки по объявлению функций - Использование функций WinAPI в Access.
Где-то от Microsoft'а есть пояснение где использовать LongPtr (хендл окна точно), а где LongLong или Long. Простым механическим замещением не прокатит, структуры имеют размер который они занимают в памяти, ИМХО.
17 дек 14, 17:38    [17012224]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3938
Joss, ну и структуры Win32API_PtrSafe.txt
17 дек 14, 17:42    [17012254]     Ответить | Цитировать Сообщить модератору
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4684
Панург
Joss, ну и структуры Win32API_PtrSafe.txt
Спасибо. То что надо.
18 дек 14, 08:58    [17014658]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Переход с Access 32 на Access 64. Есть проблемы.  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 426
шикарная прога
8 окт 18, 12:33    [21697923]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить