Маршалинг строкMarshaling Strings

При вызове неуправляемого кода копируются строковые аргументы, и при необходимости выполняется преобразование этих аргументов из формата .NET Framework (Юникод) в неуправляемый формат (ANSI).Platform invoke copies string parameters, converting them from the .NET Framework format (Unicode) to the unmanaged format (ANSI), if needed. Так как управляемые строки являются неизменяемыми, то при вызове неуправляемого кода они не копируются обратно из неуправляемой памяти в управляемую память при возврате из функции.Because managed strings are immutable, platform invoke does not copy them back from unmanaged memory to managed memory when the function returns.

В таблице ниже представлены варианты маршалинга строк, описано их использование и приведена ссылка на соответствующий пример кода .NET Framework.The following table lists marshaling options for strings, describes their usage, and provides a link to the corresponding .NET Framework sample.

СтроковоеString ОписаниеDescription ПримерSample
По значению.By value. Передает строки в качестве параметров In.Passes strings as In parameters. MsgBoxMsgBox
Как результат.As result. Возвращает строки из неуправляемого кода.Returns strings from unmanaged code. СтрокиStrings
По ссылке.By reference. Передает строки в качестве параметров In/Out с помощью StringBuilder.Passes strings as In/Out parameters using StringBuilder. BuffersBuffers
В структуре по значению.In a structure by value. Передает строки в структуре, которая является параметром In.Passes strings in a structure that is an In parameter. СтруктурыStructs
В структуре по ссылке (char*) .In a structure by reference (char*). Передает строки в структуре, которая является параметром In/Out.Passes strings in a structure that is an In/Out parameter. Неуправляемая функция ожидает указатель на символьный буфер, и размер буфера является членом структуры.The unmanaged function expects a pointer to a character buffer and the buffer size is a member of the structure. СтрокиStrings
В структуре по ссылке (char[]) .In a structure by reference (char[]). Передает строки в структуре, которая является параметром In/Out.Passes strings in a structure that is an In/Out parameter. Неуправляемая функция ожидает внедренный символьный буфер.The unmanaged function expects an embedded character buffer. OSInfoOSInfo
В классе по значению (char*) .In a class by value (char*). Передает строки в классе (класс является параметром In/Out).Passes strings in a class (a class is an In/Out parameter). Неуправляемая функция ожидает указатель на символьный буфер.The unmanaged function expects a pointer to a character buffer. OpenFileDlgOpenFileDlg
В классе по значению (char[]) .In a class by value (char[]). Передает строки в классе (класс является параметром In/Out).Passes strings in a class (a class is an In/Out parameter). Неуправляемая функция ожидает внедренный символьный буфер.The unmanaged function expects an embedded character buffer. OSInfoOSInfo
Как массив строк по значению.As an array of strings by value. Создает массив строк, который передается по значению.Creates an array of strings that is passed by value. МассивыArrays
Как массив структур, содержащих строки по значению.As an array of structures that contain strings by value. Создает массив структур, содержащих строки. Массив передается по значению.Creates an array of structures that contain strings and the array is passed by value. МассивыArrays

См. такжеSee also