static bool PerformTest()
Ключевое слово static означает разные вещи в разных контекстах. Здесь это означает «нет внешней связи», которая прямо противоположна вашей. Вы должны будете удалить это.
Не ясно, действует ли / clr при компиляции этого кода. Давайте предположим, что это так. CLR не поддерживает подобные свободные функции, он поддерживает только методы класса. Компилятор C ++ / CLI решает эту проблему путем создания фиктивного класса с именем <Module>
в глобальном пространстве имен, превращая свободную функцию в метод этого класса, который является статическим и имеет внутреннюю доступность. И имя класса, и спецификатор доступности делают его недоступным для программы на C #. Отражение должно сработать, но я никогда не пробовал.
Существует одна задняя дверь, вы можете экспортировать бесплатную функцию так же, как вы можете в собственном проекте DLL. Тот же синтаксис:
extern "C" __declspec(dllexport)
bool __stdcall PerformTest() {
// etc..
}
Компилятор C ++ / CLI экспортирует заглушку с тем же именем, что и функция, которую может вызывать любой собственный код. Заглушка загружает CLR, если требуется, переключается на выполнение управляемого кода и вызывает фактическую функцию PerformTest (). Любой код C # теперь может вызывать функцию. Затраты немного глупы, но это не должно иметь большого значения в тестовом сценарии.