powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с Any CPU и IntPtr=4/8 на x64 при конвертации
1 сообщений из 1, страница 1 из 1
Непонятки с Any CPU и IntPtr=4/8 на x64 при конвертации
    #38838633
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил только не можешь предсказать 4 или 8 байт будет IntPtr
Any CPU не позволяет сделать вывод о размере указателя.

Тут занимался причесыванием кода определения типа OS:
Код: 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.
Module Module1

  'Process and Thread Functions
  Public Declare Function IsWow64Process Lib "kernel32" (ByVal hProcess As IntPtr, _
   ByRef Wow64Process As Boolean) As Boolean

  'Dynamic-Link Library Functions
  Public Declare Unicode Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleW" _
   (ByVal lpModuleName As String) As IntPtr
  Public Declare Function GetProcAddress Lib "kernel32" _
   (ByVal hModule As IntPtr, ByVal lpProcName As String) As IntPtr 'Unicode здесь нельзя

  Public Function Is64bit() As Boolean
    If (IntPtr.Size = 8) Then Return True

    ' Assume initially that this is not a Wow64 process
    Dim bolFunc As Boolean = False

    ' Now check to see if IsWow64Process function exists
    Dim handle As IntPtr = GetProcAddress(GetModuleHandle("kernel32"), _
     "IsWow64Process")

    If handle <> IntPtr.Zero Then ' IsWow64Process function exists
      ' Now use the function to determine if
      ' we are running under Wow64
      IsWow64Process(Process.GetCurrentProcess.Handle, bolFunc)
    End If

    Is64bit = bolFunc

  End Function

End Module


Но вопрос не про код, а про то что я понял что для 64-битного кода всегда IntPtr.Size = 8 (а IsWow64Process->True - это как раз 32-битный код на 64-битной машине, для 64-битного кода она даст false, также как и для 32-битного на 32-битной OS ).

Теперь перефразирую мои рассуждения (2 топика пару дней назад, где были непонятки):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Создал дефолтный новый проект в студии на x64 машине в Net 4.5 ->
IntPtr.Size = 4 IsWow64Process->True (32-битный запуск на x64) ??? 

Конвертировал его в .Net 3.5/2.0 и т.п. ->
IntPtr.Size = 8 IsWow64Process->False (64-битный запуск на x64) 

Конвертировал его назад в .Net 4.5. ->
IntPtr.Size = 8 IsWow64Process->False (64-битный запуск на x64) 



Т.е. почему до первой переконвертации exe-шник всегда работает как 32-битное приложение?
Должен же сразу как 64-битное, как такое может быть?
Any CPU я вообще не трогал.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с Any CPU и IntPtr=4/8 на x64 при конвертации
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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