Affectez au champ PreserveSig la valeur true pour traduire directement les signatures non managées avec des valeurs HRESULT ou retval ; affectez-lui la valeur false pour convertir automatiquement les valeurs HRESULT ou retval en exceptions. Par défaut, le champ PreserveSig a la valeur true.
Lorsque la valeur est true, la signature de méthode résultante retourne une valeur entière qui contient la valeur HRESULT. Dans ce cas, vous devez inspecter manuellement la valeur de retour et répondre en conséquence dans votre application.
Lorsque vous affectez au champ PreserveSig la valeur false, la signature de méthode résultante contient un type de retour void au lieu d'un type de retour entier (HRESULT). Lorsque la méthode non managée produit HRESULT, le runtime ignore automatiquement une valeur de retour S_OK (ou 0) et ne lève pas d'exception. Pour les valeurs HRESULT autres que S_OK, le runtime lève automatiquement une exception qui correspond à HRESULT. Notez que l'attribut DllImportAttribute effectue uniquement cette conversion pour les méthodes qui retournent HRESULT.
Vous pouvez modifier le comportement de rapport d'erreurs par défaut des valeurs HRESULT en exceptions lorsque des exceptions conviennent mieux à la structure de rapport d'erreurs de votre application. Toutefois, vous pouvez décider d'utiliser le rapport d'erreurs HRESULT dans d'autres cas où l'utilisation des valeurs HRESULT est préférable.
Ce champ est similaire à PreserveSigAttribute ; toutefois, à la différence du champ PreserveSig, l'attribut a, par défaut, la valeur false.
Dans certains cas, les développeurs Visual Basic utilisent DllImportAttribute au lieu de l'instruction Declare pour définir une fonction DLL dans du code managé. La définition du champ PreserveSig figure parmi ces cas.