Я пытаюсь обернуть мой код C ++ в C #.
Мне удалось экспортировать свои функции в DLL, а затем импортировать их из C #.
Моя проблема заключается в следующем:
В моем коде C ++ у меня есть синглтон, который я создаю с помощью функции «createInstance». В моей новой функции newCreateInstance, которую я экспортирую в DLL, я просто вызываю старый createInstance, а затем возвращаю указатель void, указывающий созданный мной экземпляр синглета.
В другой функции я пытаюсь оперировать экземпляром синглета. Итак, я получаю указатель void, который затем приводим к соответствующему указателю, а затем пытаюсь с ним работать.
Но я думаю, что когда я вызываю вторую функцию (после вызова первой) из C #, мой экземпляр-одиночка уже стирается из памяти. Как мне сохранить экземпляр в моей куче / стеке? это вообще возможно, или я должен сделать это по-другому?
p.s — я не могу создать тот же класс на C #, потому что я не знаю, что это реализация (это также происходит из файла DLL / LIB). Поэтому я должен использовать пустые указатели.
Спасибо!!!
Если ваши предположения о преждевременной сборке мусора верны, вы должны использовать GC.KeepAlive
как объяснил на MSDN:
Других решений пока нет …