Мне нужно запланировать выполнение части кода VBA каждые 500 мс в Microsoft PowerPoint для Mac (версия 16).
В Word и Excel я могу использовать Application.OnTime
метод для планирования кода, но этот метод не существует в PowerPoint и в любом случае имеет гранулярность 1 секунду.
В Windows я могу использовать внешний вызов функции SetTimer
в user32
библиотека, как это сделано, например, в этот вопрос .Однако я не могу найти эквивалентный библиотечный метод в macOS.
Лучше всего написать библиотеку утилит с интерфейсом, аналогичным SetTimer
в Windows, реализованном с использованием, например, NSTimer , Grand Central Dispatch или Pthread, его установка, затем вызов из VBA и повторный вызов.
Мой опыт разработки на Mac ограничен, и мойопыт написания и вызова внешних библиотек из VBA отсутствует, но мне удалось получить двусторонний вызов / обратный вызов для работающей библиотеки C / Objective-C (по сути, void CallFunction(void (*function_pointer)(void)) { function_pointer(); }
, называемой CallFunction(AddressOf Callback)
), но когда я пытаюсьчтобы отложить этот обратный вызов через Grand Central Dispatch или Pthread, PowerPoint аварийно завершает работу, как только происходит обратный вызов с исключением EXC_BAD_ACCESS
и журналом, который я не могу легко расшифровать.Я мог бы представить себе проблему в том, что обратный вызов происходит из другого потока или что функция обратного вызова не находится по адресу, который был при вызове AddressOf
.
Есть ли готовое решение для планирования VBAкод в PowerPoint для Mac?Кроме того, есть ли какие-либо ресурсы, которые могут помочь мне отладить сбои обратного вызова?