Передача строки C # в неуправляемую DLL C в Windows Mobile

У меня есть неуправляемая DLL на C ++, которую мне нужно вызвать из приложения Windows Mobile C # .

I ' У меня есть оболочка C #, и она прекрасно работает на рабочем столе. Я могу вызывать функции DLL из настольной программы C # и передавать строки без проблем.

Однако, когда я компилирую библиотеку и оболочку для мобильной платформы, я получаю ошибку в строках DllImport, в которых говорится, что CharSet. ANSI не распознается. Единственные параметры, которые мне разрешено писать, - это CharSet.Auto и CharSet.Unicode.

Проблема в том, что независимо от этого параметра строки, получаемые в функциях C ++, являются строками с широкими символами, а не с обычными символами *. струны - это то, что они ожидают. После выхода из приложения может пройти 10-15 минут и более, но я все еще не вижу доказательств того, что остатки моего приложения были собраны сборщиком мусора. Вы можете спросить, а почему бы просто не собирать деньги на выходе? Что ж, мой реальный сценарий таков: мой перехват исключений выполняется внутри службы WCF, размещенной внутри службы Windows. Я не могу поймать, когда служба Windows закрывается (и, следовательно, вручную вызываю GC.Collect () ), потому что, насколько я могу судить, для этого нет события.

Где я ошибаюсь? Как мне убедиться, что если что-то глубоко внутри службы WCF в конечном итоге сломает мою службу Windows, у меня будет возможность зарегистрировать исключение до того, как служба выйдет из строя?

13
задан Kirill Kobelev 17 April 2018 в 00:22
поделиться