Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход с Access 32 на Access 64. Есть проблемы. / 8 сообщений из 8, страница 1 из 1
17.12.2014, 15:04
    #38836067
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
Подсунули Access 2013 64 разрядный. И заставляют переводить на него программы. И чтоб была совместимость 32-х битным.
Вот попробовал пример
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
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-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
17.12.2014, 16:55
    #38836187
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
Joss, если я правильно понял проблему, то
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#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 ...

ИМХО
...
Рейтинг: 0 / 0
17.12.2014, 17:10
    #38836201
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
Сам задал вопрос, сам ответил. Неправильно задекларирована функция
У меня
Код: vbnet
1.
2.
3.
Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As LongPtr

а надо
Код: vbnet
1.
2.
3.
Public Declare PtrSafe Function ShowWindow Lib "user32" _
            (ByVal hwnd As LongPtr, _
            ByVal nCmdShow As LongPtr) As Long


Отсюда возникает вопрос: Когда надо ставить LongPtr , когда Long , а когда LongLong ? Я про декларирование, если что...
...
Рейтинг: 0 / 0
17.12.2014, 17:18
    #38836210
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
to Панург

C этим декларированием тот ещё геморой. Вот описание пользовательского типа в Access 2003 (32 бит)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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-х битной? Так?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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

Или нет?
...
Рейтинг: 0 / 0
17.12.2014, 17:38
    #38836230
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
Joss, я давненько разбирался с этим вопросом, но уже подзабыл (увы мне). Вот посмотри ссылки по объявлению функций - Использование функций WinAPI в Access .
Где-то от Microsoft'а есть пояснение где использовать LongPtr (хендл окна точно), а где LongLong или Long. Простым механическим замещением не прокатит, структуры имеют размер который они занимают в памяти, ИМХО.
...
Рейтинг: 0 / 0
17.12.2014, 17:42
    #38836234
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
Joss, ну и структуры Win32API_PtrSafe.txt
...
Рейтинг: 0 / 0
18.12.2014, 08:58
    #38836625
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
ПанургJoss, ну и структуры Win32API_PtrSafe.txt Спасибо. То что надо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.10.2018, 12:33
    #39714341
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход с Access 32 на Access 64. Есть проблемы.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход с Access 32 на Access 64. Есть проблемы. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]