Bonjour,

Je fais un essai avec une fonction pour lister les formats de papier disponibles pour une imprimante.
A l'origine,le code vient de VB6 et a été convertit en vb.net.

Lors de l'exécution j'ai le message d'erreur suivant:
Une exception de type 'System.ExecutionEngineException' a été levée.
Dans les listes d'erreurs j'ai ce message pour les 2 codes en couleur verte dans le code complet:
Avertissement 1 La variable 'formatpapier' est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution.
Le problème est que les variables i et p sont nulles sur la ligne "combien = DeviceCapabilities(i, p, 2, 0, 0)"

Voici le code complet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    
    Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Integer, ByRef lpOutput As IntPtr, ByRef lpDevMode As IntPtr) As Integer

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim impri, porte As String
        impri = "PDFCreator" '<<<<<<<<<<====== Ici le nom de ton imprfimante à toi
        porte = "PDFCreator:" ' <<<<<<<<<<<<============== ici le port sur lequel elle est
        MsgBox("Cette imprimante supporte les tailles de papier suivantes :" & formatpapier(impri, porte))
    End Sub

    Private Function formatpapier(ByRef i As String, ByRef p As String) As String
        Dim combien As Integer
        Dim Tailles() As Short
        combien = DeviceCapabilities(i, p, 2, 0, 0)
        'UPGRADE_WARNING: La limite inférieure du tableau Tailes est passée de 1 à 0. Cliquez ici*: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="0F1C9BE1-AF9D-476E-83B1-17D43BECFF20"'
        ReDim Tailles(combien)
        Call DeviceCapabilities(i, p, 2, Tailles(0), 0)
        Dim nb As Integer
        For nb = 1 To combien
            formatpapier = formatpapier & vbCrLf & Str(Tailles(nb))
        Next
    End Function
Avez-vous une idée de l'origine de ce problème?

Si vous avez besoin je pourrai mettre le code d'origine VB6 avant conversion

Merci pour votre aide