DllImportAttribute.PreserveSig Alan

Tanım

Dönüş değerlerine sahip HRESULT yönetilmeyen yöntemlerin doğrudan çevrilip çevrilmediğini HRESULT veya dönüş değerlerinin otomatik olarak özel durumlara dönüştürüldüğünü gösterir.

public: bool PreserveSig;
public bool PreserveSig;
val mutable PreserveSig : bool
Public PreserveSig As Boolean 

Alan Değeri

Örnekler

Aşağıdaki kod örneğiDllImportAttribute, yönetilmeyen SHAutoComplete işlevi bir kez PreserveSig içeri aktarmak için ve alanı olarak ayarlanmış PreserveSigtrue ve yeniden olarak ayarlanmış falseşekilde kullanır. Bu kod örneği, işlevin SHAutoComplete bir kez ve HRESULT bir sonraki özel durumla hata oluşturmasına neden olur.

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());
    }
}
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Runtime.InteropServices



Module 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 = &H1
        SHACF_FILESYSTEM = &H1
    End Enum 


    ' 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 Sub SHAutoComplete(ByVal hwndEdit As IntPtr, ByVal dwFlags As SHAutoCompleteFlags)
    End Sub


    ' 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 Function SHAutoCompleteHRESULT(ByVal hwndEdit As IntPtr, ByVal dwFlags As SHAutoCompleteFlags) As Integer
    End Function
End Module



Module Program

    Sub Main()
        Run()

    End Sub


    Sub 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.
        Dim iPtr As 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 e As Exception
            Console.WriteLine("Exception handled: " + e.Message)
        End Try

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

        ' Call the SHAutoComplete function using HRESULTS.
        Dim HRESULT As Integer = Win32.SHAutoCompleteHRESULT(iPtr,Win32.SHAutoCompleteFlags.SHACF_DEFAULT)

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

    End Sub
End Module

Açıklamalar

PreserveSig Yönetilmeyen imzaları doğrudan değerlerle HRESULT çevirmek için alanını true olarak ayarlayın; dönüş değerlerini otomatik olarak özel durumlara dönüştürmek HRESULT için olarak ayarlayınfalse. Varsayılan olarak, PreserveSig alanı şeklindedir true.

olduğunda true, yönetilen yöntem imzası değeri içeren HRESULT bir tamsayı değeri döndürür. Bu durumda, dönüş değerini el ile incelemeniz ve uygulamanızda buna göre yanıt vermelisiniz.

alanını olarak falseayarladığınızdaPreserveSig, yönetilen yöntem imzası geçersiz bir dönüş türüne veya son yönetilmeyen [out, retval] parametresinin türüne sahiptir. Yönetilmeyen yöntem bir HRESULTürettiğinde, çalışma zamanı (veya 0) dönüş değerini S_OK otomatik olarak yoksayar ve bir özel durum oluşturmaz. dışındaki S_OKs'ler için HRESULTçalışma zamanı otomatik olarak öğesine karşılık gelen HRESULTbir özel durum oluşturur.

Özel durumların uygulamanızın hata raporlama yapısına daha uygun olduğu durumlarda varsayılan hata raporlama davranışını s olan HRESULTözel durumlara değiştirmeye karar vekleyebilirsiniz.

Bu alan ile benzerdir PreserveSigAttribute; ancak, alanının aksine PreserveSig özniteliğinin varsayılan değeri şeklindedir false.

Bazı durumlarda Visual Basic geliştiricileri, yönetilen kodda DllImportAttributebir DLL işlevi tanımlamak için deyimini kullanmak Declare yerine kullanır. PreserveSig Alanı ayarlamak bu durumlardan biridir.

Şunlara uygulanır

Ayrıca bkz.