Pergunta

Eu estava pensando sobre como passar uma String ou um StringBuilder para uma função C que mostrar uma string com o parâmetro. Eu encontrei uma grande resposta em

Chamar função não gerenciada de C #: I deve passar StringBuilder ou usar o código inseguro

?

Mas eu tenho uma dúvida. Qualquer um pode me explicar por que o coletor de lixo não mudar o local da (gerenciado) instância StringBuilder durante a execução função importada?

Foi útil?

Solução

Consulte Padrão Marshaling para Cordas para obter detalhes sobre como corda e StringBuilder é empacotado quando usando cOM e P / invocação. Ela não diz explicitamente por o padrão de uso é seguro, mas não indica que o uso de cordas e StringBuilder para P / Invoke é suportado e comportamento pretendido. Eu suspeito que o sistema de triagem cuida de fixação do tampão para a duração da chamada externa, impedindo que o GC de se mudar-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top