#c# #.net #winapi #pinvoke
#c# #.net #winapi #pinvoke
Вопрос:
Я использую следующие функции в своей программе:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr GetParent(IntPtr hWnd);
Мой вопрос таков: является ли этот подход безопасным и стабильным? Моя машина для разработки — Windows XP, и до сих пор я не обнаружил никаких проблем с ее использованием. Интересно, могут ли у меня быть проблемы в разных версиях (например, Windows Vista, Windows 7, что угодно), разных процессорах (x64) и т. Д. Можете ли вы, ребята, предоставить некоторые отзывы по этому поводу, и если есть какие-то потенциальные проблемы, как я могу их преодолеть?
Заранее спасибо.
Зубровка
Комментарии:
1. SetParent — довольно неприятная функция, ею часто злоупотребляют, чтобы склеивать окна, принадлежащие разным потокам или процессам. Который умеет превращать процесс в кататонический, когда склеенный перестает отвечать на сообщения. Безопасность потоков тоже становится неясной. Имеет ли это отношение к вам, невозможно догадаться из вопроса. Вам нечего бояться версий Windows, поддержание стабильности winapi — это хлеб с маслом Microsoft.
2. Молодец, Ганс, спасибо. Я собираюсь сделать краткий обзор кода, касающийся пунктов, которые вы упомянули!
Ответ №1:
Эти объявления P / invoke верны для всех версий Windows. Никаких проблем с XP / Vista / 7 и никаких проблем с 32/64 битами. IntPtr
плавает между 32 и 64 битами в зависимости от разрядности процесса. Это именно то, что вам нужно, чтобы произошло для HWND
.
Комментарии:
1. 1 для IntPtr плавает между 32 и 64 битами в зависимости от разрядности процесса 🙂