Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как бедному VB6 понять что он оказался на win x64 / 3 сообщений из 3, страница 1 из 1
30.05.2009, 19:08
    #36017278
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бедному VB6 понять что он оказался на win x64
1. Как понять что это x86 или x64
/topic/639255&hl=
Из этого кода не уверен что можно.
Хотя...
Код: plaintext
Private Const VER_PLATFORM_WIN32s =  0 \nPrivate Const VER_PLATFORM_WIN32_WINDOWS =  1 \nPrivate Const VER_PLATFORM_WIN32_NT =  2 
если покопать, м.б. там и про WIN64 чего найдется...
2. Как понять "Где тут системная директория? то бишь SysWOW64."
потому как
Код: plaintext
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" _\n(ByVal lpBuffer As String, ByVal nSize As Long) As Long
возвращает system32, а мне на x64 надо скопировать файлы именно в Sys..64

Ну, честно, только установил win2003 x64 и начал думать, в google особо не лазил...

Инсталлятор моей проги также не различает x86 и x64 хотя и грамотно копирует то что надо в
%system% именно в sys..64, но смысл в том, что несколько файлов именно которые идут в system32/64 будут различаться для 32/64, т.е. думаю все свалить в "%installPath%", а оттуда exe-шником VB убить лишнее и копирнуть в sys32/64 нужное (при установке, понятно). Ну и плюс несколько файлов в "%InstallPath%" также разные будут.

В принципе отдельный setup на x64, что там все OK, я уже сделал, но эти "несколько файлов" немного места занимают, просто не хотелось бы плодить большое к-во системозависимых версий.
...
Рейтинг: 0 / 0
31.05.2009, 06:07
    #36017461
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бедному VB6 понять что он оказался на win x64
1. На первый вопрос ответил:
Код: plaintext
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.
'http://www.freevbcode.com/ShowCode.asp?ID=9043
Private Declare Function GetProcAddress Lib "kernel32" _
    (ByVal hModule As Long, _
    ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" _
    Alias "GetModuleHandleA" _
    (ByVal lpModuleName As String) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" _
    () As Long
Private Declare Function IsWow64Process Lib "kernel32" _
    (ByVal hProc As Long, _
    bWow64Process As Boolean) As Long


Public Function Is64bit() As Boolean
    Dim handle As Long, bolFunc As Boolean
    ' Assume initially that this is not a Wow64 process
    bolFunc = False
    ' Now check to see if IsWow64Process function exists
    handle = GetProcAddress(GetModuleHandle("kernel32"), _
                   "IsWow64Process")
    If handle >  0  Then ' IsWow64Process function exists
        ' Now use the function to determine if
        ' we are running under Wow64
        IsWow64Process GetCurrentProcess(), bolFunc
    End If
    Is64bit = bolFunc
End Function
...
Рейтинг: 0 / 0
31.05.2009, 07:32
    #36017466
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бедному VB6 понять что он оказался на win x64
2. Есть такая ф-ция:
http://msdn.microsoft.com/en-us/library/ms724405(VS.85).aspx
Например так. Если ответ на пункт1 =false, то не надо ее вообще вызывать, ну а если уж x64=true то глядишь чего выдаст нужное. Проверял, все работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private Declare Function GetSystemWow64Directory Lib "Kernel32.dll" _
Alias "GetSystemWow64DirectoryA" (ByVal lpBuffer As String, ByVal uSize As Long) As Long
Public Function GetSystemWow64Dir() As String
Dim evar As String
Dim elen As Long
    evar = String( 256 , " ")
    elen = GetSystemWow64Directory(evar, Len(evar))
    If elen =  0  Then
        'ERROR_CALL_NOT_IMPLEMENTED= 120 (0x78) ???
        GetSystemWow64Dir = ""
    Else
        evar = Left(evar, InStr(evar, Chr( 0 )) -  1 )
        GetSystemWow64Dir = CorrectDir(evar)
    End If
End Function
Public Function CorrectDir(str As String) As String
    If Not (Right(str,  1 ) = "\") Then
        CorrectDir = str & "\"
    Else
        CorrectDir = str
    End If
End Function
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как бедному VB6 понять что он оказался на win x64 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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