Планирование кода VBA в PowerPoint для Mac - PullRequest
2 голосов
/ 14 июня 2019

Мне нужно запланировать выполнение части кода 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?Кроме того, есть ли какие-либо ресурсы, которые могут помочь мне отладить сбои обратного вызова?

...