Эквивалент user32.dll в OS X - PullRequest
       29

Эквивалент user32.dll в OS X

6 голосов
/ 22 августа 2009

Я пишу библиотеку, которая использует несколько функций из библиотеки windows user32.dll, но я компилирую ее с Mono, чтобы увидеть, как она работает на OS X. К сожалению, по понятным причинам она не может найти библиотеку user32.dll.

Но у меня такой вопрос ... есть ли подобная библиотека на OS X, которую я могу использовать?Я специально ищу следующие функции:

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

Я думаю, что установка WINE поможет, но я бы предпочел избежать этого, если это возможно.Использование Ruby-оболочки win32 также возможно?

Ответы [ 2 ]

5 голосов
/ 22 августа 2009

С веб-сайт Mono :

Если вы вызываете что-то, предоставляемое вашей платформой (обычно это win32 API), вам нужно будет найти способ реализовать одинаковую функциональность на всех ваших целевых платформах. Это может означать замену вашего неуправляемого вызова управляемым эквивалентом, или это может означать определение платформы, на которой вы работаете, и вызов Win32 / * nix / OSX / и т. Д. эквивалент.

(http://pinvoke.net иногда может помочь вам найти управляемый эквивалент вызовов Win32 API.)

Если вы звоните в свою собственную нативную библиотеку, то это зависит от кроссплатформенных возможностей вашей библиотеки. Если ваша нативная библиотека будет работать на всех ваших целевых платформах, то ваше приложение должно быть в порядке. Если нет, вы можете сделать свою кроссплатформенную совместимую нативную библиотеку, выполнить операцию в управляемом коде или обойти ее, определив, на какой платформе вы работаете.

И они также ссылаются на страницу Взаимодействие с собственными библиотеками .

Просматривая pinvoke , один результат состоит в том, что GetForegroundWindow ссылается mwinapi - на первый взгляд, это не выглядит переносимым, так что вам может не повезти в поиске управляемое решение.

1 голос
/ 22 августа 2009

Вероятно, нет прямого отображения. В OS X существует несколько сред Cocoa / Carbon / Java / X11, и каждая среда имеет свои собственные API. Какао и Java являются объектно-ориентированными API, тогда как Carbon и X11 основаны на функциях. Apple рекомендует использовать Какао для нового приложения. Вы должны создать экземпляры объектов Какао и инкапсулировать доступ через вызов вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...