Например, где создается окно? Вызывается ли какая-либо родная функция Win32? Я пытался искать в mscoree.dll, но не нашел такой функции, как CreateWindowEx, которая могла бы это сделать.

-1
rwCapt 3 Фев 2022 в 22:04
2
Вы изучали System.Windows.Forms.dll?
 – 
JAlex
3 Фев 2022 в 22:07
Хм, я не думаю, что найду что-то, если буду искать пространства имен. Наверное я плохо объяснил. Я хочу знать, в чем заключается «магия» .NET. Как и где он вызывает любую нативную функцию, которая будет отображать окно с заданными пользователем параметрами.
 – 
rwCapt
3 Фев 2022 в 22:09
1
И это находится в System.Windows.Forms.dll. В конце концов вы захотите просмотреть атрибуты и атрибут [DllImport] - docs.microsoft.com/en-us/dotnet/api/…
 – 
Lasse V. Karlsen
3 Фев 2022 в 22:10
О, я не знал, что это библиотека, импортированная фреймворком. Спасибо! Я пойду за этим следом.
 – 
rwCapt
3 Фев 2022 в 22:13
Значит, вы не знали, что System.Windows.Forms — это пространство имен WinForms? Вы действительно использовали его? Попробуйте следовать коду, начните с Control.CreateHandle
 – 
Charlieface
4 Фев 2022 в 00:37

2 ответа

Платформы пользовательского интерфейса .NET, WinForms/WPF и многие другие, как правило, являются оболочками над собственными платформами пользовательского интерфейса ОС (либо Win32 в Windows, либо Cocoa в macOS, либо GTK+ в Linux).

Чтобы узнать, как они перекрывают такие нативные API, вам следует искать в их репозиториях исходного кода, а не в mscoree.dll,

0
Lex Li 3 Фев 2022 в 22:57

Итак, немного поковырявшись с ILSpy.exe в System.Windows.Forms.dll, я нашел следующую цепочку методов:

new Form();
|
Form.CreateHandle();
|
Control.CreateHandle();
|
NativeWindow.CreateHandle();
|
WindowClass.Create();
|
new WindowClass();
|
WindowClass.RegisterClass();
|   
UnsafeNativeMethods.GetProcAddress(
    new HandleRef(null, 
        UnsafeNativeMethods.GetModuleHandle("user32.dll")), "DefWindowProcW");

Я не так хорошо знаком с работой с окнами Win32 и, возможно, пропустил фактическую последовательность создания окна, но могу поспорить, что она где-то в классе NativeWindow.

-1
JAlex 3 Фев 2022 в 22:48