Вы не можете создать CString
в управляемом коде. Очевидно, что вам нужен дополнительный слой между управляемым кодом и собственным кодом.
Это дает вам возможность создать C ++ / CLI DLL, которая находится между ними. Вы можете вызвать этот код из вашей управляемой сборки без необходимости P / invoke. А из среднего уровня C ++ / CLI вы можете создать CString
.
Однако есть одна оговорка. Вы должны использовать ту же среду выполнения C ++, что и нативную DLL. Это может быть возможно, но вполне вероятно, что это будет камнем преткновения. Например, если DLL была написана с использованием MSVC6, то вам также потребуется создать промежуточный уровень с MSVC6, что исключает использование C ++ / CLI. Вернуться к P / invoke и char*
в этом случае.
Я бы подчеркнул, что это ужасная практика - экспортировать интерфейс DLL на основе CString
, и я буду искать альтернативы DLL.