Я пробовал несколько разных способов передачи указателя на функцию, ни одна из которых не сработала, НО оказалось, что с этим кодом все в порядке.
Когда я использовал код любой формы, который был успешно принят DLL-регистратором, отладка показала, что впоследствии он сразу же обнулится.
Я использую Тестовый проводник VS '. Оказывается, некоторые тестируемые экземпляры процессов не закрывались должным образом, поэтому я поместил процессы тестового хоста в фоновом режиме, и я думаю, что адреса как-то испортились.
Подсказки заключались в периодической неспособности выполнить тест более одного раза и очень странном поведении в режиме отладки - маркер выполнения возвращался назад и пропускал все вокруг, создавая загадочные исключения WINRT_ASSERT (! Is_sta ()). Ответ - запустить Process Explorer и проверить, не застряли ли процессы под VS. (немного раздражает, что VS не может сказать мне, что была проблема с процессом, который он тестировал, но nvm)
Мой код использует библиотеку WinML. Если я бегу в режиме процессора, это нормально. Если я использую графический процессор, он зависает при выключении, поэтому мне нужно выяснить, почему.
Спасибо всем за помощь.
Редактировать: мое первоначальное предположение в моем вопросе состояло в том, что это была проблема при перемещении кода от необъекта к объекту - это было совершенно неправильно. Первоначальная необъектная версия кода работала, потому что она была в демо-клиенте, единственной исполняемой консольной программе, вызывающей DLL, на которую никогда не влияла хитрая проблема завершения работы. В модульном тесте с несколькими экземплярами это стало проблемой.