powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что все-таки в .Net есть App.hInstance?
3 сообщений из 3, страница 1 из 1
Что все-таки в .Net есть App.hInstance?
    #38883931
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, например оно надо для CreateWindowEx.
Делал так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  Public Declare Unicode Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" _
   (ByVal dwExStyle As Integer, ByVal lpClassName As String, ByVal lpWindowName As String, _
   ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
   ByVal nHeight As Integer, ByVal hwndParent As IntPtr, ByVal hMenu As IntPtr, _
   ByVal hInstance As IntPtr, ByRef lpParam As Object) As IntPtr

    g_hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, _
     REBARCLASSNAME, _
     vbNullString, _
     RebarStyle, _
     0, _
     0, _
     rcClient.Right, _
     0, _
     Form1.PanelToolbar.Handle, _
     IntPtr.Zero, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32(), _
     Nothing)


Пока в .Net 4.5 + x64 не словил ошибку с .ToInt32()

Искал на чего заменить и как люди делают, попробовал такой вариант
Код: vbnet
1.
IntPtr hInstance = Process.GetCurrentProcess().Handle


В подробности не лез, но понял что это что-то другое и в частности Toolbar вписанный в Rebar подглючивает (визуально видно смещение на пару пикселей, не так как в VB6 оригинале) - т.е. это другой hInstance и не тот который мне нужен.

Пробовал пихать туда IntPtr.Zero, вроде работает но не уверен что это есть гуд.

Остановился пока на следующем варианте:
Код: vbnet
1.
2.
3.
4.
     IntPtr.Zero, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt64(), _
     Nothing)


Вроде работает как надо и на x64 и на x86 коде.

Как все-таки правильно?

Почему глючит первый вариант более менее понятно. Потому что 64-битный указатель (на x64) не конвертируется в Int32.
Вариант .ToInt64 хоть и не глючит но тоже сомнителен - с т.зр. 32-битного кода.

По хорошему мне надо
Код: vbnet
1.
2.
3.
4.
     IntPtr.Zero, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).<ToIntPtr()>, _
     Nothing)



Как это родить?
...
Рейтинг: 0 / 0
Что все-таки в .Net есть App.hInstance?
    #38883935
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

метод System.Runtime.InteropServices.Marshal.GetHINSTANCE возвращает IntPtr, зачем вам IntPtr преобразовываться в IntPtr О_о
...
Рейтинг: 0 / 0
Что все-таки в .Net есть App.hInstance?
    #38883940
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

m-m-m... Да, действительно. Лоханулся-с.
Это называется когда-то гуглил и не вдумываясь передрал кусок кода.

Так правильно?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    g_hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, _
     REBARCLASSNAME, _
     vbNullString, _
     RebarStyle, _
     0, _
     0, _
     rcClient.Right, _
     0, _
     Form1.PanelToolbar.Handle, _
     IntPtr.Zero, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)), _
     Nothing)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что все-таки в .Net есть App.hInstance?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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