Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

DllImportAttribute.PreserveSig champ

 

Date de publication : novembre 2016

Indique si les méthodes non managées qui ont HRESULT ou retval retournent des valeurs sont traduites directement ou si HRESULT ou retval retournent des valeurs sont automatiquement converties en exceptions.

Espace de noms:   System.Runtime.InteropServices
Assembly:  mscorlib (dans mscorlib.dll)

public bool PreserveSig

Valeur de champ

Type: System.Boolean

Définir le PreserveSig champ true permet de traduire directement les signatures non managées avec HRESULT ou retval valeurs ; il valeur false convertir automatiquement HRESULT ou retval valeurs aux exceptions. Par défaut, le PreserveSig champ est true.

Lors de la true, la signature de méthode résultante retourne une valeur entière qui contient le HRESULT valeur. Dans ce cas, vous devez manuellement inspecter la valeur de retour et réagir en conséquence dans votre application.

Lorsque vous définissez la PreserveSig champ false, la signature de méthode résultante contient un type de retour void au lieu d’un entier (HRESULT) type de retour. Lorsque la méthode non managée produit un HRESULT, le runtime ignore automatiquement une valeur de retour de S_OK (ou 0) et ne lève pas d’exception. Pour HRESULTautres que S_OK, le runtime lève automatiquement une exception qui correspond à la HRESULT. Notez que le DllImportAttribute attribut effectue uniquement cette conversion pour les méthodes qui retournent un HRESULT.

Vous pouvez décider de modifier le comportement de rapport d’erreurs par défaut HRESULTen exceptions lorsque des exceptions conviennent mieux à la structure de votre application de signalement d’erreurs.

Ce champ est similaire à la PreserveSigAttribute; Toutefois, contrairement à la PreserveSig champ, la valeur par défaut pour l’attribut est false.

Dans certains cas, les développeurs Visual Basic utilisent la DllImportAttribute, au lieu d’utiliser la Declare instruction, pour définir une fonction DLL dans du code managé. Définition de la PreserveSig champ est un de ces cas.

Le de code suivant montre comment utiliser le DllImportAttribute pour importer non managé SHAutoComplete fonction une fois avec le PreserveSig champ la valeur true et à l’aide de la PreserveSig champ la valeur false. Cet exemple de code montre le SHAutoComplete fonction génère une erreur avec une exception une fois et une HRESULT Suivant.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

internal class Win32
{
    // The SHAutoComplete function allows you
    // to add auto-compete functionality to your
    // Windows Forms text boxes. In .NET Framework
    // 1.1 and earlier, you can use SHAutoComplete.
    // Later versions have this ability built in without
    // requiring platform invoke.

    // See the MSDN documentation of the
    // SHAutoComplete function for the
    // complete set of flags.
    public enum SHAutoCompleteFlags
    {
        SHACF_DEFAULT = 0x00000000,
        SHACF_FILESYSTEM = 0x00000001
    }

    // Use the DllImportAttribute to import the SHAutoComplete function.
    // Set the PreserveSig to false to specify exception errors.
    [DllImportAttribute("shlwapi.dll", EntryPoint = "SHAutoComplete", ExactSpelling = true, PreserveSig = false)]
    public static extern void SHAutoComplete(IntPtr hwndEdit, SHAutoCompleteFlags dwFlags);

    // Use the DllImportAttribute to import the SHAutoComplete function.
    // Use the default value of the PreserveSig field to specify HRESULT errors.
    [DllImportAttribute("shlwapi.dll", EntryPoint = "SHAutoComplete", ExactSpelling = true)]
    public static extern int SHAutoCompleteHRESULT(IntPtr hwndEdit, SHAutoCompleteFlags dwFlags);
}


static class Program
{
    static void Main()
    {
        Run();
    }

    static void Run()
    {
        // Create a null (nothing in Visual Basic) IntPtr
        // to pass to the SHAutoComplete method.  Doing so
        // creates a failure and demonstrates the two ways
        // that the PreserveSig property allows you to handle
        // failures.
        // Normally, you would pass a handle to a managed
        // Windows Forms text box.
        IntPtr iPtr = new IntPtr(0);

        // Call the SHAutoComplete function using exceptions.
        try
        {
            Console.WriteLine("Calling the SHAutoComplete method with the PreserveSig field set to false.");

            Win32.SHAutoComplete(iPtr, Win32.SHAutoCompleteFlags.SHACF_DEFAULT);
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception handled: " + e.Message);
        }

        Console.WriteLine("Calling the SHAutoComplete method with the PreserveSig field set to true.");

        // Call the SHAutoComplete function using HRESULTS.
        int HRESULT = Win32.SHAutoCompleteHRESULT(iPtr, Win32.SHAutoCompleteFlags.SHACF_DEFAULT);

        Console.WriteLine("HRESULT handled: " + HRESULT.ToString());


    }
}

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: