Campo DllImportAttribute.ThrowOnUnmappableChar
Publicado: agosto de 2016
Dica
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.
Habilita ou desabilita a geração de uma exceção em um caractere Unicode não mapeável que é convertido em um caractere "?" ANSI.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (em mscorlib.dll)
Sintaxe
public bool ThrowOnUnmappableChar
public:
bool ThrowOnUnmappableChar
val mutable ThrowOnUnmappableChar : bool
Public ThrowOnUnmappableChar As Boolean
Valor do Campo
Type: System.Boolean
Comentários
truepara indicar que uma exceção será gerada cada vez que o marshaler interoperabilidade converte um caractere não mapeável; false para indicar que o ThrowOnUnmappableChar campo será desabilitado. Este campo é false por padrão.
O common language runtime converte em caracteres ANSI que qualquer gerenciado caracteres Unicode passados para um método não gerenciado em execução no Windows 98 ou Windows Me. Mapeamento de melhor ajuste permite que o marshaler interoperabilidade fornecer um caractere de fechamento correspondente quando não existe nenhuma correspondência exata. Por exemplo, o marshaler converte o caractere Unicode copyright c para não gerenciados métodos que aceitam caracteres ANSI. Alguns caracteres não têm uma representação de melhor ajuste; Esses caracteres são chamados não mapeável. Caracteres não mapeável geralmente são convertidos para o padrão '?' Caractere ANSI.
Aviso
Determinados caracteres Unicode são convertidos em caracteres perigosos, como a barra invertida ' \' caractere, que pode alterar inadvertidamente um caminho. Definindo o ThrowOnUnmappableChar campo true, você pode indicar a presença de um caractere não mapeável ao chamador lançando uma exceção.
Aviso
Você não pode alterar os valores padrão fornecidos pelo BestFitMapping e ThrowOnUnmappableChar campos ao passar uma matriz gerenciada cujos elementos é caracteres ANSI ou LPSTRs para uma matriz segura não gerenciada. Mapeamento de melhor ajuste está sempre habilitado e nenhuma exceção é lançada. Lembre-se de que essa combinação pode comprometer o modelo de segurança.
Exemplos
Em alguns casos, os desenvolvedores do Visual Basic usam o DllImportAttribute para definir uma função DLL no código gerenciado, em vez de usar o Declare instrução. Definindo o ThrowOnUnmappableChar campo é um dos casos. O exemplo a seguir mostra como aplicar o mais rígido definições de método de invocação de segurança de mapeamento de caractere para uma plataforma especificando o conjunto de caracteres ANSI, desabilitando melhor o comportamento de mapeamento de ajuste e gerar uma exceção em caracteres de Unicode não mapeados.
[DllImport("My.dll", CharSet=CharSet.Ansi,
BestFitMapping=false,
ThrowOnUnmappableChar=true)]
static extern int SomeFuncion2(int parm);
<DllImport("My.dll", CharSet := CharSet.Ansi, _
BestFitMapping := false, _
ThrowOnUnmappableChar := true)> _
Public Shared Function SomeFuncion2(parm As Integer) As Integer
End Function
[DllImport("My.dll", CharSet=CharSet::Ansi,
BestFitMapping=false,
ThrowOnUnmappableChar=true)]
int SomeFuncion2(int parm);
Informações de Versão
Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Windows Phone
Disponível desde 8.1
Confira Também
CharSet
BestFitMapping
Classe DllImportAttribute
Namespace System.Runtime.InteropServices
marshaling de interoperabilidade
Retornar ao início